트랜잭션을 이렇게 하는것과 저렇게 하는것의 차이 ? ㅋ 0 6 1,705

by AquaMacker [2010.03.23 18:01:22]


트랜잭션의 차이를 쬐금 알고 잡아서 글을 또 올리게 되어버렸습니다 ^^;

자자 질문 나갑니다~~~

1번~~~ 같이 걸어버리는 것
Begin

   Insert Into ABC ~~~
   Insert Into BBB ~~~

Exception
When Others Then
RAISE TransactionError;
END; 

EXCEPTION
WHEN TransactionError THEN
ROLLBACK;

2번~~~ 따로따로 거는것
Begin

  Insert Into ABC ~~~

Exception
When Others Then
RAISE TransactionError;
END; 

Begin

  Insert Into BBB ~~~

Exception
When Others Then
RAISE TransactionError;
END; 

EXCEPTION
WHEN TransactionError THEN
ROLLBACK;

에러나을때 Rollback되는건 똑같죠 ?
테이블 30개 정도 쭈욱 지우고 Rollback 시키는 거랑 하나하나 트랜잭션 걸어서 지우는 거랑 RollBack은
다 되는거겠죠 ? ^^;;;

차이를 잘 모르겠습니다.

하나하나 거는게 좀 더 세밀하게 건다는 것 밖에는 잘 모르겠습니다..

부디 답변을 부탁드리겠습니다...(__)

by 마농 [2010.03.23 18:06:13]
Begin ~ End 블럭은 논리적인 작업 단위라고 생각하시면 됩니다.
각각의 개별작업에 의미를 부여한다면 Begin~End 블럭으로 감싸는게 좋겠죠.

실제로 동작되는 트렌젝션의 작업 단위는 dml 을 시작한 시점부터 커밋/롤백을 한 시점까지입니다.

by AquaMacker [2010.03.23 18:10:40]
헉 무지 빠른답변 감솨요 ^^;
DML을 시작시점이라면 프로시져를 시작한 시점이라고 봐도 되나요 ?
Delete를 30개 정도 해야 되서요 ^^;;; 살이 살살 떨린다는 ㅋ

by 마농 [2010.03.23 18:13:06]
프로시져 하나를 하나의 트랜젝션이라고 봐도 무방하지요.

by AquaMacker [2010.03.23 18:14:11]
감사하지요 ^^;

즐 퇴근요~~~ *^^*

by 헌쓰 [2010.03.23 18:52:39]
일반적으로 exception문 전에 commit 한번 exception문 후에 rollback 한번...

commit;
exception
when others then
rollback;

PL/SQL내에서 다량에 insert, delete, update를 할 때는 생각을 많이 해야되는 부분입니다.

select문만 사용하면 commit, rollback 필요 없습니다.

부족한 부분 있어면 댓글 많이 달아 주세요.. 꾸벅

by AquaMacker [2010.03.23 19:05:45]
MS계열이시고 TransactionScope을 사용하신다면 Commit; 은 사용하시면 안됩니다 ^^; 그냥 안써도 자동으로 commit이 되더군요 ^^; 참고하시고요...
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입