Zestaw wierszy, które zostaną zwrócone z kursora, jest określany w punkcie, w którym kursor jest otwarty (za pośrednictwem wyraźnej OPEN
lub niejawnie przez pętlę FOR
). W takim przypadku usunięty wiersz nie zostanie zwrócony w pętli.
Ogólnie rzecz biorąc, zapytanie nie jest wykonywane wszystkie naraz. Oracle wykonuje kwerendę na tyle, aby pobrać następny zestaw wierszy, zwraca te wiersze do maszyny wirtualnej PL/SQL i czeka, aż żądanie przyjdzie, aby pobrać więcej wierszy. W 11g, Oracle wykona domyślnie BULK COLLECT
z 100 wierszy na raz, więc co 100 iteracji w pętli zapytanie jest wykonywane dalej, dopóki nie będzie już wierszy do zwrócenia. Ze względu na spójność odczytu w wielu wersjach, Oracle zawsze zwróci dane do ciebie, ponieważ istniało, gdy kursor był otwarty, nawet jeśli inne sesje są dokonywane i zatwierdzanie zmian podczas działania kodu.
Niesamowite, właśnie takie wyjaśnienie, którego szukałem. Dzięki! – DiscoInfiltrator