从这个问题(Use Bulk Collect result in a select query without cursor的答案开始,我想知道是否可以在SELECT ... BULK COLLECT INTO ...中使用LIMIT选项。
我知道可以使用显式游标,但是我想知道是否可以使用直接选择语句。
谢谢
答案 0 :(得分:2)
返回大量行的
SELECT BULK COLLECT INTO
语句产生一个大集合。要限制行数和集合大小,请使用以下其中一项:
ROWNUM
伪列(在Oracle数据库SQL语言参考中描述)
SAMPLE
子句(在《 Oracle数据库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
是独立的,数据也可能在查询之间发生变化(除非您也更改隔离级别)。