2013-11-26 34 views
5
DECLARE 
    string_of_5_chars VARCHAR2(5); 
BEGIN 
    BEGIN 
     string_of_5_chars := 'Steven'; 
    EXCEPTION 
     WHEN value_error THEN 
      RAISE no_data_found; 
     WHEN no_data_found THEN 
      dbms_output.Put_line ('Inner block'); 
    END; 
EXCEPTION 
    WHEN no_data_found THEN 
     dbms_output.Put_line ('Outer block'); 
END; 

Yanıt, çıkışın 'Dış blok' olacağını söylüyor, birisi iç bloğun neden çalıştırılmayacağını açıklayabilir mi? İç içe istisna blokları hakkında daha fazla bilgi için kahinOracle iç içe geçirilmiş bloklar ve özel durum yönetimi

+0

Oracle Express Edition ve SQL Geliştirici (hem ücretsiz) ve PL/SQL bu bloğun yürütülmesine hata ayıklama indirirken denediniz mi? –

cevap

8
DECLARE 
string_of_5_chars VARCHAR2(5); 
BEGIN 
BEGIN 
    string_of_5_chars := 'Steven'; // Varchar has a size of 5 defined above. So it will throw a value_error(due to size constraints) exception. 
EXCEPTION 
    WHEN value_error THEN // This exception block will handle the error thrown above. 
     RAISE no_data_found; // It raises a no_data _found exception which by rule has to be handled in the outer exception block. So it goes to the outer exception block. 
    WHEN no_data_found THEN 
     dbms_output.Put_line ('Inner block'); 
END; 
EXCEPTION 
WHEN no_data_found THEN 
    dbms_output.Put_line ('Outer block'); // Exception is handled here which causes it to print 'Outer Block' 
END; 

Oku here istisnalar önceliği nedir. string_of_5_chars := 'Steven'; olarak

2

düşünmeniz gerekir kontrol istisna blok en ZAMAN düzenli VAKA açıklamaya benzer olarak hükümler. Koşulun eşleştiği ilk WHEN, ve bu özel durum işleyicisindeki aşağıdaki WHEN cümleleri atlanır.

Bu nedenle, iç istisna bloğundaki ikinci WHEN yan tümcesi kod yürütme yolunda değildir ve dış özel durum bloğu, iç içe istisna ilk WHEN deyimiyle yükseltilen no_data_found hatasını yakalar. Bu senaryoya göre

İstisna yayılma burada açıklanmıştır: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00706

İlgili konular