Die Menge der Zeilen, die von einem Cursor zurückgegeben werden, wird an dem Punkt bestimmt, an dem der Cursor geöffnet wird (entweder über eine explizite OPEN
oder implizit durch die FOR
-Schleife). In diesem Fall werden die gelöschten Zeilen nicht in Ihrer Schleife zurückgegeben.
Im Allgemeinen wird die Abfrage nicht auf einmal ausgeführt. Oracle führt die Abfrage aus, um die nächste Reihe von Zeilen abzurufen, gibt diese Zeilen an die PL/SQL-VM zurück und wartet, bis die Anforderung weitere Zeilen abruft. In 11g führt Oracle implizit BULK COLLECT
von 100 Zeilen gleichzeitig aus, so dass alle 100 Iterationen der Schleife die Abfrage weiter ausgeführt wird, bis keine weiteren Zeilen zurückgegeben werden. Aufgrund der Lesekonsistenz mehrerer Versionen gibt Oracle die Daten immer so zurück, wie sie beim Öffnen des Cursors vorhanden waren, auch wenn während der Ausführung des Codes andere Sitzungen Änderungen vornehmen und Änderungen vornehmen.
Super, genau die Art von Erklärung, die ich suchte. Vielen Dank! – DiscoInfiltrator