oracle 대량 cursor 문에서 update 그리고 insert처리시 성능 문제 및 loop에서 오류 발생시 오류내용 이력 저장후 정상건 만 처리 되게 처리 0 0 2,737

by lgxj20 [PL/SQL] [2024.03.04 14:02:07]


DECLARE
        CURSOR CUST IS
            ---조건.
            SELECT cus_no_inner,hpno
            FROM DUAL;

                   
    BEGIN
        
        FOR CUR_CUST IN CUST LOOP
            
            -- 쿠폰 번호 가지고 오기
            SELECT CPON_NO
            INTO v_cpon_no
            FROM TABLE_A A
            WHERE 1=1
               AND 조건 = 조건
            for update wait 3;    <-- 이렇게하는 이유는 insert문 끝나기전에 시간을 두어서 처리하려고?
            
            -- 쿠폰 지정                    
            UPDATE TABLE_A
                SET cus_no_inner = CUR_CUST.cus_no_inner
                WHERE cpon_no = v_cpon_no;
            
            V_ERR_POINT := 'CHECK_POINT_03';
            --문자 문구 저장 [발송1]
            
            
            select xxx
                  ,yyy
                  ,mmm
              INTO v_xxx, v_yyy, v_seq, v_mmm, v_sms_title , v_sms_txt
              from table_c
             where 1 = 1
               and 조건 = 조건

            V_ERR_POINT := 'CHECK_POINT_04';
            INSERT INTO table_dd
            ( 
                ....
            )
            values
            ( 
                ......
            );
            
            COMMIT;
            
        END LOOP;
        
        
        -- 여기서 문의 드릴 내용은 commit이 있는데 만약 위에 'table_c select 하는 곳에서 오류가 발생하게 되면 그전에 loop돈 데이타는 commit되서 insert 되어 야되는거 아닌가요?
        -- 그리고 혹시 한번에 8만건 의 데이타를 처리할때 성능 향상을 할수 있는 방법이 있을까요?
        -- 원하는건 오류가 발생해도 오류건은 insert 처리하고 문제되는건은 따로 테이블을 생성해서 error_table 같은걸 만들어서 처리를 하려고 합니다.
    END;    

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입