-2

查看附件以检查 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;

关于代码的执行,哪项陈述是正确的?

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 回答
0

据我所知,答案是 C,因为您正在调用的 Exception 不存在于块中,因此将无法搜索它并且无法引发它并且会给出一些错误。

于 2013-07-26T07:49:29.383 回答