-2

PL/SQL コードを調べるには、Exhibit をご覧ください。

SET serveroutput ON
DECLARE
  past_due EXCEPTION;
  acct_num NUMBER;
BEGIN
  DECLARE
    past_due EXCEPTION;
    acct_num NUMBER;
    due_date DATE    := sysdate -1;
    todays_date DATE := sysdate;
  BEGIN
    IF due_date < todays_date THEN
      raise past_due;
    END IF;
  END;
EXCEPTION
WHEN past_due THEN
  dbms_output.put_line('handling past_due exeption.');
WHEN OTHERS THEN
  dbms_output.put_line('could not recognize rxception.');
END;

コードの実行について正しい記述はどれですか?

A. コードで発生した例外は、PAST_DUE 例外の例外ハンドラによって処理されます。

B. サブブロックで同様の名前の例外を宣言できないため、実行されません。

C. サブブロックに例外ハンドラがないため、サブブロックで PAST_DUE 例外が発生すると、プログラムが突然終了します。

D. 囲んでいるブロックによって発生した PAST_DUE 例外は、外側のブロックには伝播されず、WHEN OTHERS 例外ハンドラーによって処理されます。

ダンプでは答えはCでしたが、Dだと思います

4

2 に答える 2

1

(D) は正しいことに最も近いですが、実際には正しくありません。past_due内側のブロックで発生する例外は、外側のブロックでキャッチされる例外と同じではありませんpast_due。したがって、内側のブロックのpast_due例外は、外側のブロックのOTHERハンドラーによってキャッチされます。コードを実行してみると、「rxception を認識できませんでした。」と出力されることがわかります。回答 (D) で間違っているのは、「... PAST_DUE 例外は... 外側のブロックに伝播されない...」ということです。これは間違っています - 例外外側のブロックに伝播されますが、そのための特定のハンドラーがないため (また、例外が宣言されたコンテキストが利用できないため、存在することもできません)、WHEN OTHERS...ハンドラーによって処理されます。したがって、

共有してお楽しみください。

于 2013-07-25T13:07:56.813 に答える