2013-07-25 91 views
-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

+0

C? d?什麼? :-) –

+0

喔對不起,我也加入現在的答案@JoachimIsaksson –

回答

1

(d)是最接近於正確的,但即使它不是真正的權利。在內部塊中引發的past_due異常與在外部塊中捕獲的異常不是相同的past_due異常。因此,內部塊的past_due異常被外部塊的OTHER處理程序捕獲。嘗試運行代碼,你會看到它打印出「無法識別rxception」。答案(D)的不正確之處在於它說「... PAST_DUE異常...不會傳播到外部塊...」。這是錯誤的 - 例外傳播到外部塊,但由於沒有特定的處理程序(也不能作爲聲明異常聲明的上下文不可用),它由WHEN OTHERS...處理程序處理。因此,在我看來,沒有任何答案是正確的。

分享和享受。

+0

我應該怎麼做,研究考試,如果答案不明確:( @Bob賈維斯 –

+0

我想借此研究問題向教練告訴他希望他能夠對這些問題進行合理的討論,或者如果其他方面都失敗了,那麼即使答案不完全正確,他也會明白他是如何回答這個問題的。 –

+0

非常感謝很多@Bob jarvis –

0

按照我的答案是C,因爲你調用的異常不存在於塊中,所以不能搜索它並且不能夠提升它並會給出一些錯誤。

+1

但我嘗試在SQL開發人員和它的工作像D @Harshit –

+0

FWIW當我第一次(快速)讀完我想的問題時,「答案顯然是A」。我必須**運行代碼**來實現我的錯誤。這是一個製造出來的學術問題,國際海事組織比無用的 - 它不僅在程序中有多個級別定義了類似命名的例外,而且如果(如OP所示)「正確」的答案被認爲是( C),那麼「正確的」答案不僅僅是錯誤的錯誤,而是一個不好的例子。海事組織的例外是全球資源,不應該在多個層面重新定義。分享並享受。 –