2016-05-31 4 views
1

J'ai un procedure qui appelle 2 interne procedures, je veux rollback les procédures appellent si une condition est vraie, est-ce possible?Puis-je revenir en arrière après avoir appelé la procédure Oracle?

Ce pseudo démontrer ce que je veux faire:

Create or Replace procedure Main 

    Call procedure_1(); 
    Call procedure_2(); 

    IF X = true THEN 
     ROLLBACK; 
    END IF; 

END Procedure Main; 
+0

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

Répondre

2

Vous pouvez le faire 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; 

Note:

Si votre procédure stockée ont une DDL statements comme create\alter\drop\truncate etc.. alors la savepoint ne sera pas valide car les instructions DDL numéro commit avant et après la déclaration.

Vous pouvez revenir à une savepoint définie dans la transaction en cours, vous ne pouvez pas rollback à l'savepoint après l'émission DDL statements/Commit.

+0

J'ai reçu cette erreur: le point de sauvegarde 'sp_1' n'a jamais été établi dans cette session ou est invalide –

+0

Si votre procédure stockée a des "instructions DDL" comme 'create \ alter \ drop \ truncate etc ..', le point de sauvegarde sera invalide car les instructions' DDL' émettent 'commit' avant et après l'instruction. – Praveen

+0

non Je n'ai pas de déclarations DDL, tout ce que j'ai est sélectionner, insérer et mettre à jour la déclaration seulement. –