2015-01-30 4 views
0

xlm에서 10 개의 테이블까지 데이터를 삽입해야하므로 계층 구조는 다음과 같습니다.유효성 검사가 누락 된 경우 각각의 모든 삽입을 롤백하는 방법

  • T1이 검증 중 T1 이상 T10하는 T3에 실패 할 경우 T2는 T10까지
  • 을 자식 테이블 T3, T4, T5, T6 등을 자식 테이블 T2
  • 을 가지고, T2 테이블 삽입은 롤백한다.

SavePoint를 사용하고 있는데 누락 된 유효성 검사가 있으면 특정 세이브 포인트를 롤백합니다.

여기 내 질문에 10 개의 세이브 포인트를 사용해야하므로 모든 테이블의 트랜잭션을 롤백하거나 하나의 세이브 포인트 만 있으면 충분합니까?

+0

삽입물이 – Sathya

+0

@Sathya 실패하면 T2 세이브 포인트에 T2에서 세이브 포인트 및 롤백을 설정 무엇 유효성 검사가 T8에 실패 할 경우, 윌이 롤백 7 테이블 삽입 세이브 포인트를 t2에 설정하면? – developer

+0

예. 그러나 T2 이후에 세이브 포인트를 작성하면 T2 이전에 롤백되지 않습니다. –

답변

1

t1 이상의 t3에서 t10까지 유효성 검사가 실패하면 t2 테이블 삽입이 롤백되어야합니다.

그래서 당신은 T3..T10에 삽입하면 전체 트랜잭션 T1으로, 초기 점 즉, 어떤 삽입을 롤백하고 T2는 롤백해야 할 동안 아무것도 잘못되면 의미한다.

그런 다음 세이브 포인트를 작성하는 이유는 무엇입니까? ROLLBACK을 발급하면 모든 트랜잭션, 즉 모든 트랜잭션이 롤백됩니다.

어쨌든 정말로 필요한 경우 T1에서 트랜잭션을 시작하기 전에 SAVEPOINT를 먼저 작성하십시오. 이제 유효성 검사에 실패하면 ROLLBACK TO SAVEPOINT으로 전체 트랜잭션을 롤백합니다.

ROLLBACK TO SAVEPOINT는 해당 SAVEPOINT가 해당 저장 점까지 롤백 될 때 발생한 트랜잭션을 의미합니다. 예를 들어

,

SQL> SAVEPOINT A  

SQL> INSERT INTO TEST VALUES (1,'Savepoint A'); 

1 row inserted.  

SQL> SAVEPOINT B  

SQL> INSERT INTO TEST VALUES (2,'Savepoint B'); 

1 row inserted.  

SQL> ROLLBACK TO B;  

Rollback complete.  

SQL> SELECT * FROM TEST;  

ID MSG 
-------- ----------- 
1   Savepoint A 

Example source