Kann %NOTFOUND null zurückgegeben, nachdem eine Holen?
Diese Frage ausgelöst wird, ein sehr interessanter Punkt; es scheint ein Widerspruch in der Oracle-Dokumentation, ob es möglich ist, für %NOTFOUND
zu null nach zu Holen. Ist es?
Zitat aus der 11g Dokumentation
Hinweis: In Beispiel 6-16, wenn FETCH nie holt eine Zeile, dann c1%NOTFOUND
ist immer NULL, und die Schleife wird nie verlassen. Um zu verhindern, dass unendlich
looping, diesen EXIT verwenden stattdessen die Anweisung: EXIT WHEN c1%NOTFOUND ODER
(c1%NOTFOUND NULL);
In der Dokumentation scheint direkt widersprechen sich selbst, wie es auch die folgenden sagt, das impliziert, dass nach einer fetch - %NOTFOUND
nicht null sein.
%NOTFOUND (das logische Gegenteil von %FOUND) zurück:
NULL, nachdem die explizite cursor ist geöffnet, aber vor dem ersten fetch
FALSE, wenn die Letzte fetch-von der expliziten cursor eine Zeile zurückgegeben
STIMMT, sonst
Den 10g-Dokumentation hat eine ähnliche Warnung, die nicht unbedingt einen direkten Widerspruch, wie er warnt, dass ein fetch möglicherweise nicht erfolgreich ausgeführt werden kann, um für dieses Verhalten ausgestellt werden.
Vor dem ersten fetch -, %NOTFOUND mit NULL ausgewertet. Wenn FETCH nie
erfolgreich ausgeführt wird, die beendet wird, WENN die Bedingung ist nie WAHR, und die
Schleife wird nie verlassen. Um sicher zu sein, möchten Sie vielleicht die Verwendung der folgenden
EXIT-Anweisung statt:EXIT WHEN c1%NOTFOUND ODER c1%NOTFOUND NULL IST;
In welchen Situationen ist es vielleicht eine fetch-entweder "fail" oder vielleicht %NOTFOUND
null zurück, nach einer fetch-Anweisung ausgeführt wurde?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finde ich eine situation, wo einer fetch-Anweisung kann scheitern:
Aber das macht nur Ihre Frage stärker, da wird es bewerten zu null, weder in 10 noch in 11g ...
Ich denke, der Teil, der von stolpern, die Sie bis ist dies:
Irgendwo in der Vergangenheit muss es ein code-Beispiel, das wie folgt aussah:
Gegeben, dieses Stück code, dann ist die Aussage wahr. Wenn der Abruf wird nie ausgeführt (schlägt fehl), dann %NOTFOUND null. Die
EXIT WHEN
Bedingung nicht zu TRUE ausgewertet werden (null zu false ausgewertet wird). Dann, in der Tat, die Schleife wird immer weiter.%notfound
noch die fetch wird nicht "gearbeitet".FETCH
nie ausgeführt wird (erfolgreich oder sonst wie), dann wird das %notfound null ist.Dies ist eine situation, die leicht geprüft werden:
Die Ausgabe des Skripts in Oracle APEX 4.1 ist (ich denke, dass APEX mit Oracle 11gR2, aber Sie können leicht führen Sie das Skript auf jede version):
Basierend auf diesem test
%NOTFOUND
wird nicht NULL sein, nachdem ein fetch ausgeführt wurde. Dies entspricht auch dem, was die 10g-und 11g-Dokumentation steht, dass in der anfänglichen Beschreibung der%NOTFOUND
Attribut. Der Hinweis über die Schleife nie verlassen werden muss, von einer alten version der Beispiel. Da es nur ein Hinweis, ich würde sagen es ist sicher, um das Vertrauen der anfänglichen Beschreibung und ignorieren Sie den Hinweis.