2016-05-31 1 views
1

procedure은 내면이 procedures이고, rollback이 필요하면 절차가 호출됩니다. 이것이 가능하면 가능합니까? 저장 프로 시저가 다음 create\alter\drop\truncate etc.. 같은 어떤 DDL statements이있는 경우
oracle 프로 시저를 호출 한 후 롤백 할 수 있습니까?

:

Create or Replace procedure Main 

    Call procedure_1(); 
    Call procedure_2(); 

    IF X = true THEN 
     ROLLBACK; 
    END IF; 

END Procedure Main; 
+0

https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#i7105 – Margus

답변

2

는이 Using SAVEPOINT With ROLLBACK

Create or Replace procedure Main 

    SAVEPOINT sp_1; 
    Call procedure_1();  
    Call procedure_2(); 

    IF X = true THEN 
     ROLLBACK TO sp_1; 
    END IF; 

END Procedure Main; 

주를 수행 할 수 있습니다

이 의사는 내가하고 싶은 것을 보여 savepoint은 DDL 문을 발행 할 때 유효하지 않습니다. commit. 진술 전과 후에. 당신은 현재의 트랜잭션 (transaction)에 정의 된 savepoint으로 롤백 할 수

, 당신은 DDL statements/Commit을 발행 한 후 savepoint으로 롤백 할 수 없습니다.

+0

에서 트랜잭션을 찾으십시오.이 오류는 savepoint 'sp_1'이 세션에 설정되지 않았거나 유효하지 않습니다. –

+0

저장 프로 시저에'create \ alter \ drop \ truncate 등의'DDL 문 '이 있으면'DDL' 문이 문 앞뒤에'commit'을 발행하므로 저장 점은 유효하지 않습니다. – Praveen

+0

아니요 DDL 문장을 가지고 있지 않아요, 제가 가지고있는 건 문장을 선택하고 삽입하고 업데이트하는 것뿐입니다. –

관련 문제