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
Read Full Post | Make a Comment ( 1 so far )

user_views_definition

Posted on jún 4, 2009. Filed under: Uncategorized | Značky:, , |

Bud mi nieco uniklo, alebo ma Oracle este aj v 11g ulozene definicie view iba v long stlpcoch, ktore su uprimne na …, neda sa v nich hladat, rozumne pristupovat jedine z pl/sql, achjo. Tak si pre potesenie z moci sql vyrabam tabulku do ktorej si mergujem definicie pre take to domace dotazovanie … 😉

drop table user_views_definition;

create table user_views_definition (
  view_name       varchar2(30) not null,
  view_definition clob,
  constraint  user_views_definition_pk
  primary key (view_name)
  using index
)
;

DECLARE
   c CLOB;
BEGIN
   FOR ii IN (SELECT * FROM user_views)
   LOOP
      c := ii.text;
      
      MERGE INTO user_views_definition t
      USING (SELECT ii.view_name AS view_name, c AS view_definition FROM dual) s
      ON (t.view_name = s.view_name)
      WHEN MATCHED THEN UPDATE SET t.view_definition = s.view_definition 
      WHEN NOT MATCHED THEN INSERT (t.view_name, t.view_definition) VALUES (s.view_name, s.view_definition);
      
   END LOOP;
   COMMIT;
END;
/

Read Full Post | Make a Comment ( None so far )

  • Co prave robim

    • 【「七つの大罪 聖戦の予兆」コラボ開催!】メリオダス、ディアンヌ、バン、キング、ゴウセルがモンストに登場!ギルサンダー、ヘルブラム、ヘンドリクセン等がクエストに出現!伝説の騎士団<七つの大罪>と共に闘おう! #モンスト xfl.ag/2vTgQ8F 1 day ago
    • 【「#ナツの極み。」キャンペーン】海やプールで、夏の限定ガチャが無料で引ける「ナツ玉」がもらえる!?さらに、“運極”作るとサーティワンのアイスが99%当たる!モンストで、一緒に“ナツ”を極めよう! #モンスト xfl.ag/2vExw3Q 1 month ago
    • 【鋼の錬金術師 FAコラボ開催!】エルリック兄弟、ロイ・マスタング、リン・ヤオ、リザ・ホークアイがモンストにやってきた!スカー、エンヴィー、グリードがクエストに出現!“錬金術師”達と共に闘おう! #ハガレンモンスト #モンスト bit.ly/2sNPPBR 2 months ago
    • 映画『パイレーツ・オブ・カリビアン/最後の海賊』とのコラボ開催中!金と銀の“ジャック・スパロウ“をゲットで「パイレーツ缶」が当たるキャンペーンも!ジャック・スパロウと一緒にモンストで冒険しよう! #モンスト #パイレーツモンスト xfl.ag/2re67pF 2 months ago
    • 【リアル版 超・獣神祭『#十二支再競争』】本物のネズミやトラが走る「十二支伝説」のやり直し競争!?1着的中で投票したオーブの10倍のオーブGET!更に1&2着を的中で総額3億円分を山分け!どの動物に投票する? #モンスト xfl.ag/2r8817u 2 months ago
    • 「映画ドラえもん」コラボキャラを“運極”したいな!ミッションでキャラが入手しやすいからできるかも!レアなプレゼントが貰える「運極カチコチ大作戦キャペーン」もあるから、みんなも挑戦してみてね! #モンスト #モンストドラえもん xfl.ag/2lG0kab 6 months ago
    • 年末年始もモンスト!大晦日に「年末BIGボーナスくじ」でオーブ5個届く&総額1億円が当たる!大晦日と元旦はログインでオーブ合計20個!元旦より超・獣神祭の限定新キャラ「パンドラ」登場! #モンストやるなよ #モンスト xfl.ag/2fKD1ot 8 months ago
    • 「幽☆遊☆白書」コラボ開催!モンストに浦飯幽助、蔵馬、飛影、桑原和真、幻海が登場!登場キャラボイスは全て録りおろし!”伊達にあの世は見てねぇぜ!”幽助達と一緒に「暗黒武術会」に挑め! #モンスト #幽白モンスト xfl.ag/2fcrlwu 10 months ago
  • Meta

  • Kategórie

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