Skip navigation

Kivételkezelés

Kivételkezelés

A PL/SQL blokkokban van lehetőség kivételkezelésre is. A kivételeknek két típusa van: felhasználó által megadott, és beépített.

A felhasználói kivételeket úgy lehet létrehozni, hogy deklarálunk egy EXCEPTION típusú változót, majd a végrehajjtó szegmensben a megfelelő helyen kivételt dobunk a RAISE paranccsal.
Deklaráció: kivételnév EXCEPTION
Kivétel dobás: RAISE kivételnév

A beépített kivételek közül néhány:

  • NO_DATA_FOUND: a SELECT utasítás nem adott vissza sort
  • TOO_MANY_ROWS: egy sort kellett volna visszaadni a SELECT utasításnak, de több sorral tért vissza
  • INVALID_NUMBER: a karakterláncot nem sikerült számmá konvertálni
  • OTHERS: az egyéb, az EXCEPTION részben fel nem sorolt kivételek lekezelésére szolgál

A felsoroltakon kívül még sok kivétel van.

Amikor a rendszerben egy kivéltel létrejön, a vezérlés a kivételkezelő szegmensre adódik át és a végrehajtó szegmens további utasításai nem futnak le.

Példa beépített kivételekre

DECLARE
    v_ber DEMO.munkatars.ber%TYPE;
    v_veznev DEMO.munkatars.vezeteknev%TYPE;
    v_kernev DEMO.munkatars.keresztnev%TYPE;
BEGIN
    v_ber := 200000;
    SELECT vezeteknev, keresztnev
    INTO v_veznev, v_kernev
    FROM DEMO.munkatars
    WHERE ber = v_ber;
    DBMS_OUTPUT.PUT_LINE(v_veznev || ' ' || v_kernev);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('Nincs ilyen fizetés');
    WHEN TOO_MANY_ROWS THEN
        DBMS_OUTPUT.PUT_LINE('Több embernek is ez a fizetése');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Egyéb hiba');
END;

Példa felhasználói kivételre

DECLARE
    nincs_vevo EXCEPTION;
BEGIN
    DBMS_OUTPUT.PUT_LINE('Ez vegrehajtodik');
    RAISE nincs_vevo;
    DBMS_OUTPUT.PUT_LINE('Ez nem hajtodik vegre');
EXCEPTION
    WHEN nincs_vevo THEN
        DBMS_OUTPUT.PUT_LINE('Nincs ilyen vevo');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Egyéb hiba');
END;