PL/SQL try-catch-finally concept

Posted on október 9, 2009. Filed under: Uncategorized | Značky:, |

Taky maly pokus o koncept implementacie try-catch-finally v PL/SQL.

  • 1. priblizenie
  • + zachovava “strukturu”
  • – rozbija error_stack a chybovu hlasku

<<try_catch_finally_block>>
declare
  --some handled exception
  e exception;
  pragma exception_init(e, -20666);
  
  --some unhandled user defined exception
  e_some_user_defined exception; 
  pragma exception_init(e_some_user_defined, -20000);
  
  --some ora exception
  e_some_ora exception; 
  pragma exception_init(e_some_ora, -1);
  
  l_sqlcode pls_integer;
  l_sqlerrm varchar2(500);
begin

  <<try_block>>
  begin
    --try
    dbms_output.put_line('try');
    
    --dbms_output.put_line('handled exception raised');
    --raise e;    
    
    --dbms_output.put_line('some unhandled user defined exception raised');
    --raise e_some_user_defined;

    --dbms_output.put_line('some unhandled ora exception raised');    
    --raise e_some_ora;
    
  exception   
    when e then  
       --catch
      dbms_output.put_line('catch');
  
    when others then  
      --store unhandled exception
      l_sqlcode := sqlcode;
      l_sqlerrm := sqlerrm;      
      dbms_output.put_line('store unhandled exception');
      
  end try_block;  
  
  --finally
  dbms_output.put_line('finally');  
  
  --reraise unhandled  exception
  if (l_sqlcode is not null) then
    dbms_output.put_line('reraise unhandled exception');
    
    --if user defined exception
    if l_sqlcode between -20999 and -20000 then          
      --reraise user defined error
      raise_application_error(l_sqlcode, l_sqlerrm);
    else
      --reraise ora error
      <<reraise_ora_error>>
      declare        
      begin
        execute immediate '
          declare
            e exception;
            pragma exception_init(e, '||l_sqlcode||');
          begin
            raise e;
          end;
        ';
      end reraise_ora_error;      
    end if;
    
  end if;
  
end try_catch_finally_block;
/

  • 2. priblizenie
  • – nezachovava “strukturu”
  • + zachovava error_stack a chybovu hlasku
  • + cistejsi & prehladnejsi kod

<<try_catch_finally_block>>
declare
  --some handled exception
  e exception;
  pragma exception_init(e, -20666);
  
  --some unhandled user defined exception
  e_some_user_defined exception; 
  pragma exception_init(e_some_user_defined, -20000);
  
  --some ora exception
  e_some_ora exception; 
  pragma exception_init(e_some_ora, -1);
  
  --local procedure where finalization is implemented
  procedure finally is
  begin
    --finally
    dbms_output.put_line('finally');    
  end finally;
  
begin

  <<try_block>>
  begin
    --try
    dbms_output.put_line('try');
    
    --dbms_output.put_line('handled exception raised');
    --raise e;    
    
    --dbms_output.put_line('some unhandled user defined exception raised');
    --raise e_some_user_defined;

    --dbms_output.put_line('some unhandled ora exception raised');    
    --raise e_some_ora;
    
  exception   
    when e then  
       --catch
      dbms_output.put_line('catch');
  
    when others then  
      --finally
      finally;
      
      --raise unhandled
      raise;
      
  end try_block;  
  
  --finally
  finally;
  
end try_catch_finally_block;
/

Reklamy

Make a Comment

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s

Jedna odpoveď to “PL/SQL try-catch-finally concept”

RSS Feed for Stefan Oravec’s Blog Comments RSS Feed

rozbija error stack pretoze som mlady a hlupy, samozrejme a necitam manualy.

RTFM raise_application_error


Where's The Comment Form?

  • Co prave robim

    • 【鋼の錬金術師 FAコラボ開催!】エルリック兄弟、ロイ・マスタング、リン・ヤオ、リザ・ホークアイがモンストにやってきた!スカー、エンヴィー、グリードがクエストに出現!“錬金術師”達と共に闘おう! #ハガレンモンスト #モンスト bit.ly/2sNPPBR 1 week ago
    • 映画『パイレーツ・オブ・カリビアン/最後の海賊』とのコラボ開催中!金と銀の“ジャック・スパロウ“をゲットで「パイレーツ缶」が当たるキャンペーンも!ジャック・スパロウと一緒にモンストで冒険しよう! #モンスト #パイレーツモンスト xfl.ag/2re67pF 3 weeks ago
    • 【リアル版 超・獣神祭『#十二支再競争』】本物のネズミやトラが走る「十二支伝説」のやり直し競争!?1着的中で投票したオーブの10倍のオーブGET!更に1&2着を的中で総額3億円分を山分け!どの動物に投票する? #モンスト xfl.ag/2r8817u 4 weeks ago
    • 「映画ドラえもん」コラボキャラを“運極”したいな!ミッションでキャラが入手しやすいからできるかも!レアなプレゼントが貰える「運極カチコチ大作戦キャペーン」もあるから、みんなも挑戦してみてね! #モンスト #モンストドラえもん xfl.ag/2lG0kab 4 months ago
    • 年末年始もモンスト!大晦日に「年末BIGボーナスくじ」でオーブ5個届く&総額1億円が当たる!大晦日と元旦はログインでオーブ合計20個!元旦より超・獣神祭の限定新キャラ「パンドラ」登場! #モンストやるなよ #モンスト xfl.ag/2fKD1ot 6 months ago
    • 「幽☆遊☆白書」コラボ開催!モンストに浦飯幽助、蔵馬、飛影、桑原和真、幻海が登場!登場キャラボイスは全て録りおろし!”伊達にあの世は見てねぇぜ!”幽助達と一緒に「暗黒武術会」に挑め! #モンスト #幽白モンスト xfl.ag/2fcrlwu 8 months ago
    • 11/18のニコ生放送内で「モンスト武術会」で優勝するのは「B4」と予想!予想的中でオーブ1個が貰えるよ!モンスト内のミッションから11/18 19時迄、投票可能! #モンスト #幽白モンスト monster-strike.com/news/20161111_… 8 months ago
    • 【モンスト3周年感謝キャンペーン!】10月はモンストがとにかくヤバイ!ハズレなしの「モンストハッピーくじ」で旅行券やオーブ1年分が当たるチャンス!★6キャラ確定&属性が選べる無料ガチャ開催!他! #モンストやるなよ monster-strike.com/promotion/3rd_… 9 months ago
  • Meta

  • Kategórie

Liked it here?
Why not try sites on the blogroll...

%d bloggers like this: