2017-02-22 101 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