[답변]plsql goto 처리 질문입니다. 0 3 2,241

by 김영수 [2007.11.29 18:31:20]


CREATE OR REPLACE PROCEDURE TSK1.TEST_TABLE_SELECT_WRITE_PROC
as
   result_count number default 0;
   cmp_count number default 0;
   insert_count number default 0;
   begin
       FOR x IN (
            select tsk105_bumon_cd, tsk105_bumon_mei, tsk105_dlt_flg ,tsk105_toroku_ymd, tsk105_koshin_ymd
              from tsk105_bumon_update_test;
       ) LOOP
            v_count := v_count + 1;
            select count(*) into result_count from
              from tsk105_bumon_insert_test
             where x.tsk105_bumon_cd   = tsk105_bumon_cd   and
                   x.tsk105_bumon_mei  = tsk105_bumon_mei  and
                   x.tsk105_dlt_flg    = tsk105_dlt_flg    and
                   x.tsk105_toroku_ymd = tsk105_toroku_ymd and
                   x.tsk105_koshin_ymd = tsk105_koshin_ymd;
             if result_count = 0 then
                 insert_count := insert_count + 1;
                 -- 인서트 구문
                
             else
                 cmp_count := cmp_count + 1;
                
             end if;
                
       END LOOP;
      
   EXCEPTION
      WHEN OTHERS THEN
      rollback;
      DBMS_OUTPUT.PUT_LINE(x.tsk105_bumon_cd|| ||v_count||'번째 레코드 입력작업에 오류가 발생 하였습니다 ');
   end;
  
   if cmp_count > 0 then
      rollback;
      DBMS_OUTPUT.PUT_LINE(cmp_count||'건의 data 중복으로 입력이 취소되었습니다.');
   else
      DBMS_OUTPUT.PUT_LINE(insert_count||'건이 입력 되었습니다.');
      commit;
   end if;
  
END;

 

방법을 조금 달리 하였습니다.

검증 없이 만들어 봤습니다... 되야 할텐데...

by 김영수 [2007.11.29 00:00:00]
키 등.. 일단 문제의 소지는 좀 있네요...
if 문등 좀 조절하면 이관후 삭제 작업등.. 해서..
정리도 가능 할듯 하네요...
무조건 중지 해야 된다면 result_count가 0이 아닌시점에 프로그램을 중지해버리면 될듯 합니다.

by 김영수 [2007.11.29 00:00:00]
프로그램에서 중요한게 테이블의 키값과 구조를 알아야 만약의 사태에 대비할수 있는데요..

이왕 손댄거.. 자세한 테이블 스펙을 올리시면..
......

by 손님 [2007.11.29 00:00:00]
이렇게 까지...
정말 고맙습니다ㅠㅠ;
오늘 집에 못갈줄 알았는데,
힘이 막 솟는군요!!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입