A FireBird SQL programozási nyelv

Kivételkezelés

Kivételkezelés

A FireBird rendelkezik kivételkezelést támogató eszközökkel. A nyelv kivételkezelése blokk-szintű, azaz utasításblokkokhoz rendelhetünk kivételkezelő eljárásokat. A pontos szintaxis:

WHEN {< error> [, < error> �] | ANY} DO < compound_statement> < error>= {EXCEPTION exception_name | SQLCODE number | GDSCODE errcode}

Argumentum
Leírás
EXCEPTION Egy, az adatbázisban létrehozott kivételosztály
SQLCODE SQL hibakód
GDSCODE InterBase hibakód
ANY Előző három bármelyike

További megkötések és tudnivalók:

  1. Kivételkezelést kizárólag a blokk legvégén kezdeményezhetünk.
  2. A kivétel visszagyűrűzik egészen addig a blokkig, ahol lekezelik. Az összes érintett blokkban végrehajtott utasítás ROLLBACK-elve lesz.
  3. Lekezelt kivétel sosem küld hibaüzenetet.
  4. Ha van SUSPEND a blokkban, akkor ajánlott azt a kivételkezelés elé rakni közvetlenül.
  5. Az EXCEPTION-ök mindig nevesítettek, ellentétben az SQLCODE-dal, melyek típusait a következő táblázat tartalmazza:

    SQLCODE
    Üzenet
    Leírás
    <0
    SQLERROR Hiba. A pontos leírás a dokumentációban található.
    0
    SUCCESS Sikeres végrehajtás.
    1-99
    SQLWARNING Figyelmeztetés.
    >100
    NOT FOUND Nincs megfelelő rekord ill. vége van a file-nak.

    Természetesen mi is definiálhatunk kivételeket, melynek szintaxisa:

    CREATE EXCEPTION name � message�;

    Itt a "message"-re megkötés, hogy maximum 78 karakter hosszú lehet. Fontos megjegyzés, hogy az EXCEPTION nem típus, csupán egy kulcsszó, amellyel kivételeket deklarálhatunk. Az általunk deklarált kivételek gyakorlatilag csak egy névnek számítanak, amelyet használhatunk kivételek kiváltására. A kivételek az egész adatbázisra nézve globálisak.

    Egy blokkban kivételt dobni az EXCEPTION kulcsszóval tudunk, megadva utána a kivétel nevét. Példa:

    CREATE PROCEDURE kiakados RETURNS (SIKERES CHAR (1)) AS DECLARE VARIABLE i INTEGER; BEGIN i='a'; WHEN ANY DO BEGIN SIKERES='F'; SUSPEND; END END