在SELECT中使用LIMIT选项...批量收集

时间:2018-09-18 17:12:33

标签: oracle plsql bulk-collect

从这个问题(Use Bulk Collect result in a select query without cursor的答案开始,我想知道是否可以在SELECT ... BULK COLLECT INTO ...中使用LIMIT选项。

我知道可以使用显式游标,但是我想知道是否可以使用直接选择语句。

谢谢

1 个答案:

答案 0 :(得分:2)

From the documentation

  

返回大量行的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是独立的,数据也可能在查询之间发生变化(除非您也更改隔离级别)。