ORACLE

[ORACLE]BULK COLLECT INTO 예제

선영아 사랑해 2020. 11. 19. 14:35

-- 프로시저 또는 패키지에서 대용량 데이터 처리 시 유용

 

CURSOR curSaleAmt(pSaleDate VARCHAR2)
IS
SELECT STORE_CD
        , SUM(AMT)
 FROM TB_SALES
WHERE 1=1
   AND SALE_DATE = pSaleDate
GROUP BY SALE_DATE, STORE_CD
 ;

 

TYPE CUR_SALE_TBL_TYPE IS TABLE OF curSaleAmt%ROWTYPE INDEX BY BINARY_INTEGER;

C_Sale_Tbl    CUR_SALE_TBL_TYPE;
        
BEGIN
    -- CURSOR OPEN
    OPEN curSaleAmt('20201119');

    LOOP

        -- 한번 실행 할 때 마다 CURSOR 데이터를 100건 읽기.
        FETCH curSaleAmt BULK COLLECT INTO C_Sale_Tbl LIMIT 100;

 

        EXIT WHEN C_Sale_Tbl.COUNT <= 0;

 

        FOR i IN C_Sale_Tbl.FIRST..C_Sale_Tbl.LAST LOOP

            DBMS_OUTPUT.PUT_LINE(C_Sale_Tbl(i).STORE_CD || ':' || C_Sale_Tbl(i).AMT);

        END LOOP;

 

        EXIT WHEN curSaleAmt%NOTFOUND;

 

    END LOOP;

 

    -- CURSOR CLOSE
    CLOSE curSaleAmt;

END;

'ORACLE' 카테고리의 다른 글

[ORACLE]CURSOR 예제  (0) 2020.11.19
[ORACLE]tnsname.ora 설정  (0) 2020.11.16
[ORACLE]SQL%ROWCOUNT 예제  (0) 2020.11.12
[ORACLE]ROWNUM/ROW_NUMBER() 예제  (0) 2020.11.12
[ORACLE]WITH절 예제  (0) 2020.11.12