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;
방법을 조금 달리 하였습니다.
검증 없이 만들어 봤습니다... 되야 할텐데...