oracle
  • execute
  • bulk
  • collect
  • immediate
  • 2017-02-22 5 views -1 likes 
    -1

    数百万のレコードを操作する場合は、制限を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;  
    
    +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句を使用する方法ではありません。私はあなたが実行即時と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

    関連する問題