2016-08-04 9 views
0

私はpls/qlプロシージャprocedure_test()を持っていますが、このプロシージャでは表のデータが一部変更され、このプロシージャにはコミットまたはロールバックはありません。プロシージャBからプロシージャAによって行われたPLSQLロールバックの変更

だから私は別のものから、このプロシージャを呼び出す - procedure_test()内のすべての変更がコミットされprocedure_test2()からprocedure_test()の呼び出し後procedure_test2()。だから、procedure_test()の変更をロールバックするには、procedure_test2()

ありがとうございました。

+1

両方の手順のコードを追加してください。または好ましくは問題を示す最小限のバージョンである。 'procedure_test'は純粋なDMLだけを実行しているのですか、それとも暗黙的にコミットするかもしれないこともしていますか? –

答えて

2

savepointなどを使用できます。 procedure_test2()のコードは次のようになります

... 
savepoint bforetest; 
procedure_test(); 
rollback to savepoint bforetest; //this actually cancels whatever _test did. 
... 
+0

これを試しましたが、このエラーがあります。 ORA-01086:セーブポイント 'BFORETEST'はこのセッションで確立されていないか無効です。 – user2783755

+1

これは、procedure_test()がコミットまたはロールバックを実行することを意味します。ロールバックまたはコミットが実行されるたびにセーブポイントが消去されるためです。コミットも暗黙的にできることを念頭に置いてください。 – Plirkee

関連する問題