少し疑問です。このパッケージの手順を想定してみましょう。
PROCEDURE ERR_MANAGER(I_ERRM IN VARCHAR2) IS
BEGIN
ROLLBACK;
--DO SOME STUFF
END ERR_MANAGER;
PROCEDURE test IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
test2;
COMMIT;
EXCEPTION WHEN OTHERS THEN ERR_MANAGER(SQLERRM);
END test;
PROCEDURE test2 IS
BEGIN
--DO SOME TRANSACTIONNAL DML
RAISE_APPLICATION_ERROR(-20001, 'ERR'); --for the test purpose, in reality this could be any actual error
END test2;
したがって、ご覧のとおり、にエラーがありtest2()
、これはになりtest()
、メソッドで処理されerr_manager()
ます。
だから私は2つの質問があります:
- err_manager()のスコープは何ですか?それはまだ自律トランザクション内にありますか?関数呼び出しにすぎないのでそうだと思いますが、必ず確認したいのですが
- エラーが上位レベルに上がったために、コミットやロールバックを一切行わずに、自律型トランザクションを残酷に終了するとどうなりますか?
どうもありがとうございます。S。