在 SELECT 中使用 LIMIT 选项 ... BULK COLLECT INTO

usage of LIMIT option in SELECT ... BULK COLLECT INTO

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

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

谢谢,

From the documentation:

A SELECT BULK COLLECT INTO statement that returns a large number of rows produces a large collection. To limit the number of rows and the collection size, use one of these:

  • ROWNUM pseudocolumn (described in Oracle Database SQL Language Reference)

  • SAMPLE clause (described in Oracle Database SQL Language Reference)

  • FETCH FIRST clause (described in Oracle Database SQL Language Reference)

因此,根据您链接到的上一个问题中的示例,您可以这样做:

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(在第一个版本的子查询中)使其具有确定性。

带有 limit 子句的显式 fetch 版本的优点是您可以在循环中执行此操作并继续获取接下来的 1000(或任意多)行,直到您看到商场。使用 select 版本,您只能拍摄一次;除非你把它放在一个循环中并处理分页,即使这样,每个 select 都是独立的,数据可能会在查询之间发生变化(除非你也更改隔离级别)。