Из документации :
Оператор SELECT BULK COLLECT INTO
, который возвращает большое количество строк, создает большую коллекцию.Чтобы ограничить количество строк и размер коллекции, используйте одну из них:
ROWNUM
псевдостолбцовый (описан в справочнике по языку Oracle Database SQL)
SAMPLE
предложение (описано в справочнике по языку Oracle Database SQL)
FETCH FIRST
предложение (описано в справочнике по языку базы данных Oracle SQL)
Итак, из приведенного в предыдущем вопросе примера вы можете сделать:
SELECT id BULK COLLECT INTO result_bulk FROM table1 WHERE rownum <= 1000;
или, если вы находитесь на 12c:
SELECT id BULK COLLECT INTO result_bulk FROM table1 FETCH FIRST 1000 ROWS ONLY;
возможно супорядочение (в подзапросе в первой версии) для его детерминированности.
Преимущество явной версии fetch
с предложением limit
состоит в том, что вы можете сделать это в цикле ипродолжайте извлекать следующие 1000 (или сколько угодно) строк, пока не увидите их все.С версией select
вы получаете только один выстрел;если вы не поместите это в цикл и не обработаете подкачку страниц, и даже тогда, когда каждый select
независим, данные могут меняться между запросами (если вы также не измените уровень изоляции).