|
![]() | Transakce a body návratu | ![]() | Jazyk SQL a jeho implementace | Systémové objekty | ![]() |
Chybou nazýváme stav, kdy nelze normálním způsobem pokračovat v provádění operace. SQL server má pro každou chybu jistý implicitní způsob reakce. Ten se použije, pokud aplikace nepředepíše vlastní způsob ošetření chyby. Server může například předčasně ukončit operaci, odvolat rozpracovanou transakci, oznámit výskyt chyby klientovi.
Autor databázové aplikace může předepsat, co se má v případě výskytu chyby stát - popsat zpracování chyby pomocí handleru chyby. Handler může být buď lokální, a pak reaguje pouze na chyby, které nastanou v tom bloku, v němž je deklarován, nebo globální, a pak reaguje na všechny chyby ve schématu.
Viz také Chyby a jejich kategorizace z pohledu klienta.
Výjimečné situace lze rozdělit do tří druhů:
Pomocí handleru lze ošetřovat některé chyby serveru (druh 1) a všechny uživatelem definované výjimky nespojené s chybou serveru (druh 2). Výjimky třetího druhu lze ošetřovat právě tehdy, lze-li ošetřovat chybu, se kterou jsou spojeny.
Norma SQL označuje chyby pomocí řetězců pěti alfanumerických znaků, kterým říká SQLSTATE. SQLSTATE se uvádí v deklaraci handleru chyby a může se také uvést v deklaraci výjimky.
602SQL server interně označuje chyby celými kladnými čísly. Pro ty chyby serveru, kterým norma nepřidělila konkrétní SQLSTATE, se používá SQLSTATE skládající se z písmene W a čtyřmístného čísla chyby. Například chybě s číslem 152 odpovídá sqlstate "W0152". To umožňuje definovat handlery i pro chyby specifické pro 602SQL.
Nastane-li chyba či výjimka, systém pro ní hledá handler. Handler je ve své deklaraci přiřazen buď určitým chybám resp. výjimkám anebo celé třídě chyb. Při hledání handleru se postupuje od místa, v němž k chybě či výjimce došlo, směrem ven. Je-li handler nalezen, provede se a v dalším provádění příkazů se pokračuje v závislosti na druhu handleru.
Dojde-li při provádění handleru H k výjimce, která není uvnitř něj ošetřena, neuplatní se při jejím ošetření handlery deklarované na stejné úrovni jako handler H, ale pouze handlery deklarované vně.
Uvnitř handleru lze použít příkaz RESIGNAL, který předá chybu či výjimku zpracovávanou tímto handlerem k vnějšímu ošetření.
Seznam subsekcí:
![]() | Transakce a body návratu | ![]() | Jazyk SQL a jeho implementace | Systémové objekty | ![]() |