在 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 语句。
谢谢,
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
都是独立的,数据可能会在查询之间发生变化(除非你也更改隔离级别)。
从这个问题(Use Bulk Collect result in a select query without cursor)的回答开始,我想知道是否可以在SELECT中使用LIMIT选项... BULK COLLECT INTO ...
我知道可以使用显式游标,但我想知道是否可以使用直接 select 语句。
谢谢,
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
都是独立的,数据可能会在查询之间发生变化(除非你也更改隔离级别)。