从这个问题的答案开始(Use Bulk Collect result in a select query without cursor),我想知道是否可以在 SELECT ... BULK COLLECT INTO ... 中使用 LIMIT 选项
我知道使用显式游标的可能性,但我想知道是否可以使用直接选择语句。
谢谢,
从这个问题的答案开始(Use Bulk Collect result in a select query without cursor),我想知道是否可以在 SELECT ... BULK COLLECT INTO ... 中使用 LIMIT 选项
我知道使用显式游标的可能性,但我想知道是否可以使用直接选择语句。
谢谢,
从文档中:
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;
可能使用 order-by(在第一个版本的子查询中)使其具有确定性。
fetch
带有子句的显式版本的优点limit
是您可以在循环中执行此操作并继续获取接下来的 1000 行(或任意多行),直到您全部看到它们为止。使用该select
版本,您只能获得一枪;除非你把它放在一个循环中并处理分页,即使那样每个select
都是独立的,数据也可能在查询之间发生变化(除非你也改变了隔离级别)。