2016-05-31 10 views
1

私はprocedureを持っており、rollbackという2つの内線がproceduresと呼ばれています。oracleプロシージャをコールした後にロールバックできますか?

この擬似は私が何をしたいかを証明:あなたのストアドプロシージャは、その後create\alter\drop\truncate etc..のような任意のDDL statementsを持っている場合は

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ステートメントの前と後。あなたは現在のトランザクションで定義されたsavepointにロールバックすることができます

、あなたはDDL statements/Commitを発行した後savepointにロールバックすることはできません。

+0

このエラーが発生しました:このセッションでセーブポイント 'sp_1'が確立されていないか無効です –

+0

ストアド・プロシージャに 'create \ alter \ drop \ truncateなどの' DDL文 'がある場合、 'DDL'文は文の前後に' commit'を発行するのでセーブポイントは無効になります。 – Praveen

+0

いいえ私はDDL文を持っていません。私が持っているのは、選択、挿入、更新のみです。 –

関連する問題