Příkaz SQL TRY CATCH je navržen pro kontrolu code flow v případě, že nastane chybová situace (Error handling). Tato konstrukce obsahuje 2 bloky s tím, že je zde možné použít také transakci (viz článek o Transakcích). Pokud nastane chyba v prvním bloku – TRY..END , tak je aktivován mechanismus v CATCH..END bloku.

Syntaxe SQL TRY CATCH

BEGIN TRY
BEGIN TRANSACTION
      --SQL kód zde
    COMMIT
END TRY
BEGIN CATCH
    ROLLBACK
END CATCH

  • TRY část: V prvním bloku se typicky vyskytuje skript obsahující SQL DML nebo DDL (Create table, INSERT, UPDATE, atd) a případně i zahájení transakce  BEGIN TRANSACTION a COMMIT příkaz na konci (v případě že chyba nenastane).
  • CATCH část: Zde se nachází zavolání funkce nebo funkcí popisující Error (chybové hlášení, severity, atd.) s případným zalogováním chyby a dále ROLLBACK příkaz.

Příklad TRY CATCH s Error handling logováním do SQL tabulky

Pro příklad vyvoláme Error message tak, že se pokusíme dělit nulou. V CATCH části provedeme v případě chyby (která nastane) ROLLBACK a následně uložíme vlastnosti chyby do tempové tabulky pro pozdější analýzu:

BEGIN TRY
BEGIN TRANSACTION

  SELECT 1/0 AS Vysledek
  INTO #Temp;

COMMIT;

END TRY
BEGIN CATCH

     ROLLBACK;

  SELECT
    ERROR_NUMBER()    AS ErrorNumber,
    ERROR_SEVERITY()  AS ErrorSeverity,
    ERROR_STATE()     AS ErrorState,
    ERROR_PROCEDURE() AS ErrorProcedure,
    ERROR_LINE()      AS ErrorLine,
    ERROR_MESSAGE()   AS ErrorMessage
  INTO #Error_Log;

END CATCH

SQL TRY CATCH

Skript jako takový proběhl úspěšně s tím, že chyba byla odchytnuta a parametry Erroru se nachází v tempové tabulce #Error_Log

SELECT * FROM #Error_Log;

Ještě zkontrolujeme jestli není otevřená transakce a byl správně proveden ROLLBACK v CATCH bloku..vše je OK

SELECT @@TRANCOUNT;

4/5 - (4 votes)

Ing. Jan Zedníček - Data & Finance

Jmenuji se Honza Zedníček a působím jako freelancer. Tuto práci dělám pro různé firmy již přes 10 let. Před tím jsem dlouhou dobu pracoval také jako BI developer, finanční controller, analytik a krátce jako finanční manažer. Vše pro společnosti z oblasti IT, bankovnictví a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti a názory se snažím už několik let zapisovat na tento web, aby sloužily i někomu dalšímu - zejména studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

=> Přihlašte se do naší Excel facebook skupiny (1.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »
=> Pokud vám článek pomohl, sdílejte ho nebo mě uveďte na vašich webových stránkách jako užitečný zdroj informací.

3 comments on “SQL TRY CATCH & Error handling

  1. Váš příklad mi bohužel nefunguje. Testováno na Oracle 12_g.
    Dostávám následující chybu:
    Error report –
    ORA-06550: line 2, column 1:
    PLS-00103: Encountered the symbol “BEGIN” when expecting one of the following:

    := . ( @ % ;
    06550. 00000 – “line %s, column %s:\n%s”
    *Cause: Usually a PL/SQL compilation error.
    *Action:

    1. Dobrý den,
      máte pravdu. Omlouvám se za zmatky a děkuji za upřesnění.
      Díky za článek, ať se vám daří.
      O.M.

Leave a Reply

Your email address will not be published. Required fields are marked *