哪个例外将返回?

时间:2013-07-25 12:09:40

标签: exception plsql

查看Exhibit以检查PL / SQL代码。

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;

关于代码执行的说法是什么?

一个。代码中引发的异常由PAST_DUE的异常处理程序处理 异常。

B中。它不会执行,因为您无法声明具有类似名称的异常 子块。

℃。子块中引发的PAST_DUE异常导致程序突然终止 因为子块中没有异常处理程序。

d。封闭块引发的PAST_DUE异常不会传播到外部块,而是由WHEN OTHERS异常处理程序处理。

在转储中答案是C但我认为它是D

2 个答案:

答案 0 :(得分:1)

(D)最接近正确,但即使它不是真的正确。内部块中引发的past_due异常与外部块中捕获的past_due异常不同。因此,内部块的past_due异常被外部块的OTHER处理程序捕获。尝试运行代码,你会看到它打印“无法识别rxception。”。答案(D)的不正确之处在于它表示“...... PAST_DUE异常......不会传播到外部块......”。这是错误的 - 异常 传播到外部块,但由于没有特定的处理程序(也没有声明异常的上下文不可用),它由{处理} {1}}处理程序。因此,在我看来,没有答案是正确的。

分享并享受。

答案 1 :(得分:0)

根据我的说法,答案是C,因为您调用的异常不在块中,因此无法搜索它并且无法提升它并会产生一些错误。