【问题标题】:usage of LIMIT option in SELECT ... BULK COLLECT INTO在 SELECT ... BULK COLLECT INTO 中使用 LIMIT 选项
【发布时间】:2018-09-18 17:12:32
【问题描述】:

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

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

谢谢,

【问题讨论】:

    标签: oracle plsql bulk-collect


    【解决方案1】:

    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;
    

    可能使用 order-by(在第一个版本的子查询中)使其具有确定性。

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

    【讨论】:

    • 指定 BULK COLLECT INTO ... LIMIT 子句是使用显式游标的少数充分理由之一。
    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多