использование опции LIMIT в SELECT ... BULK COLLECT INTO - PullRequest
0 голосов
/ 18 сентября 2018

Начиная с ответа на этот вопрос ( Использовать массовый сбор результатов в запросе выбора без курсора ), мне интересно, возможно ли использовать опцию LIMIT в SELECT ... BULK COLLECT INTO...

Я знаю возможность использования явного курсора, но мне хотелось бы знать, возможно ли это с помощью оператора прямого выбора.

Спасибо,

1 Ответ

0 голосов
/ 18 сентября 2018

Из документации :

Оператор 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 независим, данные могут меняться между запросами (если вы также не измените уровень изоляции).

...