EXCEPTION

ďalšie názvy článku: SQLCODE, SQLERRM  

]Podporované v Oracle 

Popis


Príkaz jazyka SQL
V mnoha programovacích jazycích platí, že běhové chyby zastaví program a vrací kontrolu operačnímu systému. Pokud existuje mechanismus ošetřování vyjímek (jako je tomu např. právě v PL/SQL), je možné pokračovat ve výpočtu i po chybě a udělat tak program stabilnější a uživatelsky příznivější.

Běhové chyby lze rozdělit na:
  • Chyby v návrhu (algoritmu, ...)
  • Chyby v kódu
  • Hardwarové chyby
  • Jiné problémy


Přehled


Vyjímky v PL/SQL můžeme rozdělit na
  • Vnitřní - definované systémem (dělení nulou, nedostatek paměti, ...)
  • Uživatelské - definované uživatelem / programátorem


Některé z běžných vnitřních vyjímek mají i svá zástupná jména (např. výše zmíněným odpovídají ZERO_DIVIDE a STORAGE_ERROR), případně je lze dodatečně pojmenovat. Uživatelské vyjímky jsou pojmenovány vždy.

V případě, že v průběhu výpočtu programu nastane chyba, je vyvolána příslušná vyjímka (automaticky při vnitřní vyjímce, či explicitně pomocí přikazu RAISE). K ošetření vyvolané vyjímky se používá exception handler, který zastaví právě vykonávaný blok a po svém skončení výpočet pokračuje.

  • Předdefinované vyjímky jsou deklarovány globálně v balíčku STANDARD.
  • Vyjímky jsou jednoznačně identifikovány čísly.
  • Pojmenované vyjímky je možné zachytávat za pomoci jména (např. WHEN <JMENO_VYJIMKY> THEN ...).
  • Nepojmenované lze odchytit pouze za pomoci speciálního handleru OTHERS (WHEN OTHERS THEN ...).


Dále je možné využít funkce
  • SQLCODE - sloužící k navrácení čísla chyby
  • SQLERRM - sloužící k zobrazování chybové zprávy


Príklad


DECLARE
  pe_ratio NUMBER(3,1);
BEGIN
  SELECT price / earnings INTO pe_ratio FROM stocks
    WHERE symbol = 'XYZ';  -- might cause division-by-zero error
    INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);
  COMMIT;
EXCEPTION  -- Exception handler
  WHEN ZERO_DIVIDE THEN  -- handles 'division by zero' error
    INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL);
    COMMIT;
  ...
  WHEN OTHERS THEN  -- handles all other errors
    ROLLBACK;
    dbms_output.put_line(SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1, 255));
END;   -- exception handlers and block end here


Pozri aj


SQLERRM

]



vytlačiť článok  hľadať súvisiace články 



Chat ku článku

Vyhľadávanie na stránke
Reklama
Náhodný obrázok
náhodný obrázok
Kontakty

Martin Kasman, M Software
Smreková 3095/23
Email: martin@kasman.sk

Telefón: 0908 270 294