【问题标题】:How to set a Limit on Bulk Collect with a Nested Table PL/SQL Collection?如何使用嵌套表 PL/SQL 集合设置批量收集限制?
【发布时间】:2019-05-14 15:46:00
【问题描述】:

我正在尝试使用 limit 关键字对数据库查询设置限制。

这是我当前没有限制关键字的工作查询。

DECLARE
   TYPE NESTED_TABLE_DECLARATION IS TABLE OF SCHEMA.TABLE_NAME%ROWTYPE;
   NESTED_TABLE NESTED_TABLE_DECLARATION;
BEGIN
   SELECT * BULK COLLECT INTO NESTED_TABLE FROM SCHEMA.TABLE_NAME;
END;
/

我想避免使用游标,但仍然使用如下限制关键字。

DECLARE
   TYPE NESTED_TABLE_DECLARATION IS TABLE OF SCHEMA.TABLE_NAME%ROWTYPE;
   NESTED_TABLE NESTED_TABLE_DECLARATION;
BEGIN
   SELECT * BULK COLLECT LIMIT 100 INTO NESTED_TABLE FROM SCHEMA.TABLE_NAME;
END;
/

【问题讨论】:

  • 您使用的是什么版本的 Oracle?
  • 您是否打算从此查询中只获得 100 行?如果是这样,您是否关心获得了哪 100 行,或者您对任意 100 行是否满意?
  • 你为什么不想定义一个游标?
  • @BobJarvis:12.1 @JustinCave:为了将来的性能调整,我希望能够快速更改这个数字。该表在某些设置中可能包含 10000 条记录,而在其他设置中则超过一百万。 @ APC:我可能需要使用 dblink,并且游标不能通过 dblinks 传递。
  • 这种限制的原因是什么?

标签: oracle plsql nested-table bulk-collect rowtype


【解决方案1】:

不能在主查询中使用保留字限制,这只适用于使用游标进行批量收集以优化服务器的内存。在您的情况下,请在 Where 中使用 Rownum 。

SELECT * BULK COLLECT INTO NESTED_TABLE FROM SCHEMA.TABLE_NAME WHERE rownum <= 1000;

或Oracle12c

SELECT * BULK COLLECT INTO NESTED_TABLE FROM SCHEMA.TABLE_NAME FETCH FIRST 1000 ROWS ONLY;

【讨论】:

  • 你能添加这个例子吗?
猜你喜欢
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 2014-05-19
  • 2021-03-06
  • 1970-01-01
相关资源
最近更新 更多