2011-06-06 16 views
5

tüm koşul ie yürütmek içinİstisna kullanımı/sql

create or replace procedure Trial 
    is 
Begin 
---Block A-- 
EXCEPTION 
when others then 
insert into error_log values('error'); 
--Block A ends---- 
--Block B ---- 
----Block B ends--- 
end; 

Ben Blok B kod istediğiniz bir saklı yordam var Yukarıdaki kod B Blok yürütür not.With sadece istisna kaldırılırsa. Nasıl yapılır? Lütfen yardım edin. Şunları yapabilirsiniz

cevap

6

iç içe bloklar yarattı:

create or replace procedure Trial 
    is 
Begin 
    begin 
    ---Block A-- 
    EXCEPTION 
    when others then 
     insert into error_log values('error'); 
    end; 
    begin 
    --Block B ---- 
    end; 
end; 
+1

Gerçekten blok B etrafında 'begin' /' Sonu 'gerekmez, ancak bu durumda netlik ekleyebilir. –

2

bunları artırmadan tüm özel durumları yakalamak için ortak bir antipattern olduğunu lütfen unutmayın. Geri yükleme işleminden sonra hata günlüğünü tutmak için özerk bir işlem de düşünebilirsiniz.

Yani muhtemelen böyle bir şey ile daha iyi olurdu:

create or replace procedure Trial 
is 

    procedure finally is 
    begin 
    --Block B ---- 
    end; 

    procedure logerr (msg varchar2) is 
    PRAGMA AUTONOMOUS_TRANSACTION; 
    begin 
    insert into error_log values(msg); 
    commit; 
    end; 

Begin 
    begin 
    ---Block A-- 
    EXCEPTION 
    when others then 
     logerr(SQLERRM); 
     finally; 
     raise; 
    end; 

    finally; 
end;