LoginSignup
0
0

More than 5 years have passed since last update.

PL/SQL 内部ブロックで処理したothers例外を外側のブロックで再度処理させる

Last updated at Posted at 2018-06-20

PL/SQL内部にて予期せぬ例外が発生したとき、
意図的に例外発生ブロックを記載後、それまですべての処理をrollbackさせたかったので。

具体的には内部ソースにてraiseを記載すればさらに外に伝えてくれる。

サンプル.sql


DECLARE
ans NUMBER;
BEGIN
  BEGIN
  --内部にて適当な処理
  INSERT INTO emp VALUES(5,'hoge','job','1',sysdate,10,10,2);
  --内部にて予期しない例外発生
  ans := 1/0;
  EXCEPTION
    WHEN others THEN
    --発生したブロックをログ出力なりする。
    DBMS_OUTPUT.PUT_LINE('内部でエラーが発生しました');
    --外部ブロックに意図的に伝播させる
    RAISE;
  END;
EXCEPTION 
  WHEN others THEN
    DBMS_OUTPUT.PUT_LINE('外部でまとめてロールバックします。');
    ROLLBACK;
END;
/

実行結果


内部でエラーが発生しました
外部でまとめてロールバックします。
PL/SQLプロシージャが正常に完了しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0