查看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
答案 0 :(得分:1)
(D)最接近正确,但即使它不是真的正确。内部块中引发的past_due
异常与外部块中捕获的past_due
异常不同。因此,内部块的past_due
异常被外部块的OTHER
处理程序捕获。尝试运行代码,你会看到它打印“无法识别rxception。”。答案(D)的不正确之处在于它表示“...... PAST_DUE异常......不会传播到外部块......”。这是错误的 - 异常 传播到外部块,但由于没有特定的处理程序(也没有声明异常的上下文不可用),它由{处理} {1}}处理程序。因此,在我看来,没有答案是正确的。
分享并享受。
答案 1 :(得分:0)
根据我的说法,答案是C,因为您调用的异常不在块中,因此无法搜索它并且无法提升它并会产生一些错误。