2017-02-22 1 views
-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

가능한 중복 (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 절을 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; 
/
[오라클에 "즉시 실행" "벌크 속으로 수집"및]의
+0

내 쿼리가 정적이 아니므로 커서를 사용할 수 없습니다. 쿼리는 동적으로 작성된 후 즉시 실행에 사용됩니다. – PTK

+0

Oracle 12c를 사용하는 경우 FETCH FIRST 500 ROWS와 같은 행 제한 절을 사용할 수 있습니다 – BobC