从这个问题的答案开始( Use Bulk Collect result in a select query without cursor ),我想知道是否可以在选择中使用限制选项。。。批量收集到。。。
我知道可以使用显式游标,但我想知道是否可以使用直接select语句。
谢谢您,
From the documentation :
A SELECT BULK COLLECT INTO 返回大量行的语句将生成一个大集合。要限制行数和集合大小,请使用以下选项之一: ROWNUM 伪列(在Oracle数据库SQL语言参考中描述) SAMPLE FETCH FIRST 子句(在Oracle数据库SQL语言参考中描述)
A SELECT BULK COLLECT INTO 返回大量行的语句将生成一个大集合。要限制行数和集合大小,请使用以下选项之一:
SELECT BULK COLLECT INTO
ROWNUM 伪列(在Oracle数据库SQL语言参考中描述)
ROWNUM
SAMPLE
FETCH FIRST 子句(在Oracle数据库SQL语言参考中描述)
FETCH FIRST
因此,根据您链接到的上一个问题中的示例,您可以:
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 你只有一次机会;除非你把它放在一个循环中并处理分页,甚至每个 选择
fetch
limit
select
选择