2017-02-22 51 views
-1

对于在数百万条记录上进行操作,我想限制500个,但以下代码给出了错误。 错误报告: ORA-06550:第6行,列49: PLS-00103:出现符号 “限制” 在需要下列之一时:立即执行批量收集限制

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;  
+2

的[Oracle中 “批量收集进入” 和 “立即执行”]可能的复制(http://stackoverflow.com/questions/21117021/bulk-collect -into-and-execute-immediate-in-oracle) –

+0

'LIMIT 500'。我想你不明白为什么使用LIMIT,以及最适合批量收集的限制。 LIMIT根本就不是一个行计数器。如果你想要一个行计数器在动态查询中使用它来限制行。读这个 。 http://stackoverflow.com/questions/38659739/setting-a-value-for-limit-while-using-bulk-collect – XING

回答

0

这是不使用LIMIT子句的方式。我认为你不能在EXECUTE IMMEDIATE的BULK COLLECT中使用LIMIT子句。 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; 
/
+0

我不能使用游标,因为我的查询不是静态的。查询是动态构建的,然后用于立即执行。 – PTK

+0

如果您使用的是Oracle 12c,则可以使用行限制子句,如FETCH FIRST 500 ROWS – BobC