【问题标题】:Bulk collect limit with execute immediate立即执行批量收集限制
【发布时间】:2017-02-22 07:30:13
【问题描述】:

为了对数百万条记录进行操作,我想将限制设置为 500,但以下代码会出错。 错误报告: ORA-06550:第 6 行,第 49 列: PLS-00103:在预期以下情况之一时遇到符号“LIMIT”:

DECLARE
    TYPE EMP_T IS TABLE OF NUMBER;
    EMP_ID EMP_T;
    QRY VARCHAR2(4000):='SELECT EMPLOYEE_ID FROM EMPLOYEES';
begin   
    execute immediate QRY bulk collect into EMP_ID LIMIT 500;
END;    

【问题讨论】:

标签: oracle bulk collect execute-immediate


【解决方案1】:

这不是使用 LIMIT 子句的方式。我认为您不能将 BULK COLLECT 中的 LIMIT 子句与 EXECUTE IMMEDIATE 一起使用。 BULK COLLECT LIMIT in EXECUTE IMMEDIATE

示例:

DECLARE
    TYPE EMP_T IS TABLE OF NUMBER;
    EMP_ID EMP_T;
    CURSOR c_data IS SELECT empid FROM EMPLOYEE;
begin   
OPEN c_data;
  LOOP
    FETCH c_data
    BULK COLLECT INTO EMP_ID LIMIT 100;
    EXIT WHEN EMP_ID.count = 0;

    -- Process contents of collection here.
    DBMS_OUTPUT.put_line(EMP_ID.count || ' rows');
  END LOOP;
  CLOSE c_data;
END;
/

【讨论】:

  • 我不能使用游标,因为我的查询不是静态的。查询是动态构建的,然后用于立即执行。
  • 如果您使用的是 Oracle 12c,您可以使用行限制子句,例如 FETCH FIRST 500 ROWS
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 2015-05-14
  • 2023-02-10
  • 1970-01-01
相关资源
最近更新 更多