create procedure aaa is
cursor cur is
select *
from [table]
where [bla_bla_bla]
for update of [col_stat];
list cur%rowtype;
begin
open cur;
loop
begin
fetch cur into list
exit when cur%notfound;
[로직 수행... select 만 열심히 합니다]
update [table]
set [col_stat] = 'good'
where current of cur;
commit;
exception
when no_data_found then
update [table]
set [col_stat] = 'no data'
where current of cur;
commit;
when others then <------------------------- 문제가 되는 부분
update [table]
set [col_stat] = 'exception....'
where current of cur;
commit;
insert into [err_table] values ();
commit;
end;
end loop;
close cur;
end;
위와 같은 프로시져를 생성하여 수행하는 중입니다.
그런데 "문제가 되는 부분" 이 무한 루프에 빠집니다.
특정 데이터에 한해 가끔 오류가 발생할 수 있는 상황이 있기 때문에 그러한 특정 데이터를 모아두기 위한 exception 처리 로직을 심어둔건데 동일한 데이터가 계속 누적이 됩니다.
덕분에 야간에 테이블 스페이스가 가득 찰뻔한 중대한 상황이 두어번 있었습니다.
아무리 봐도 별다른 문제점이 있어보이질 않는데 어떠한 부분을 살펴봐야 할까요??? |