exception 발생시 rollback 안되는 현상! 0 1 2,934

by 농sql [Oracle 기초] oracle [2019.07.08 10:33:30]


염치불구하고 문의 하나 드립니다...

exception 발생시 rollback 안되는 현상이 있는데

아래처럼 insert 후 anaylze 실행 후 exception 발생하면 rollback 인 안되고 commit 이 되어 버립니다.

insert 후 analyze 처리해도 rollback 할수 있는 방법이 있을까요??
에러내용 : ERR MSG: ORA-01422: 실제 인출은 요구된 것보다 많은 수의 행을 추출합니다

 

declare v_test varchar2(100);

begin

insert into t_test (a) values('aaa') ;

execute immediate 'analyze table t_test compute statiscs'; 

select a

into   v_test
from  t_test;
exception when others then
RAISE_APPLICATION_ERROR(-20002,SQLCODE||':'||CHR(10)||'ERR MSG: '||SUBSTR(SQLERRM, 1, 100)|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
rollback;

end;

 

by 마농 [2019.07.08 10:55:28]

수행 순서를 바꾸세요.
- 변경전 : insert -> analyze -> select
- 변경후 : insert -> select -> analyze
그런데, 굳이. analyze 를 로직을 통해 트렌젝션 내에서 처리해야 하는지 의문이네요?
analyze 는 트렌젝션과 별도로 수행해야 하는 게 아닌지?

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