Megtanulják, hogyan kell kezelni a kivételeket a PL / SQL-ben



Ez a cikk egy átfogó útmutató a kivételkezelés PL / SQL-ben történő végrehajtásáról a PL / SQL-ben kínált kivételek különféle típusainak tárgyalásával.

Ha Ön programozó, akkor ismerheti a kivételkezelés fogalmát, amely szerves része bármelyiknek . Mivel a hibák elkerülhetetlenek, és még a legokosabbak is hibázhatnak kódírás közben, ismerkednünk kell azok kezelésével. Ebben a cikkben különösképpen megismerjük a PL / SQL kivételkezelését.

SQL-kivétel kezelés PL / SQL-Edureka-banAz alábbiakban bemutatjuk a cikkben tárgyalt témákat:





Mi az a kivétel?

Bármilyen rendellenes állapot vagy esemény, amely megszakítja a program utasításainak normál folyamatát futás közben, vagy egyszerű szavakkal kivétel, hiba.

A kivételkezelés szintaxisa PL / SQL-ben

NYILATKOZZA A KIVÉTEL KEZDÉSÉNEK MIKOR kivétel1 AKKOR kivétel1-kezelési nyilatkozatok MIKOR kivétel2 AKKOR kivétel2-kezelési-nyilatkozatok MIKOR kivétel3 AKKOR kivétel3-kezelési-nyilatkozatok ...

Itt annyi kivételt sorolhatunk fel, amennyit kezelni akarunk. Az alapértelmezett kivételt a „WHEN others THEN” használatával kezeljük



Példa a kivételkezelésre PL / SQL-ben

Az alábbi program megjeleníti annak a hallgatónak a nevét és címét, akinek az igazolványát megadta. Mivel az adatbázisunkban nincs 8 azonosítójú hallgató, a program felveti a futásidejű NO_DATA_FOUND kivételt, amelyet az EXCEPTION blokk rögzít.

DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT name, loation INTO s_name, s_loc FROM students WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Név:' || s_name) DBMS_OUTPUT .PUT_LINE ('Hely:' || s_loc) KIVÉTEL MIKOR no_data_found THEN dbms_output.put_line ('Nincs ilyen hallgató!') MIKOR MÁSOK AKKOR dbms_output.put_line ('Hoppá, hiba!') VÉGE

Kimenet

Nincs ilyen hallgató! A PL / SQL eljárás sikeresen befejeződött.

Itt annyi kivételt sorolhatunk fel, amennyit kezelni akarunk. Az alapértelmezett kivételt a AMIKOR AKKOR mások '

hogyan kell használni a tabló nyilvánosságát

Kivételek típusai a PL / SQL-ben

  • Rendszer meghatározása
  • A felhasználó dacolt

Ez a cikk a következő a kivételkezelésről PL / SQL , beszéljünk részletesen mindkét típusról.



Rendszer meghatározása

Az Oracle szerver implicit módon definiálja és fenntartja ezeket a kivételeket főleg az Oracle Standard Package határozza meg. Amikor kivétel történik a programon belül, az Oracle szerver egyezik és azonosítja a megfelelő kivételt az Oracle standard csomagban rendelkezésre álló kivételekből. Alapvetően ezek a kivételek előre vannak meghatározva PL / SQL ami felvetődik AMIKOR megsértik az adott adatbázis szabályát .

Az Rendszer által meghatározott kivételek további két kategóriába sorolhatók:

  • Elnevezett rendszerkivételek
  • Névtelen rendszerkivételek

Elnevezett rendszer kivételek

A megnevezett PL / SQL kivételek megnevezve a PL / SQL standard csomagjában , ezért a fejlesztőnek nem kell meghatároznia a PL / SQL kivételeket a kódjában. A PL / SQL sok előre definiált kivételt tartalmaz, amelyek akkor hajtódnak végre, ha valamelyik adatbázis-szabályt megsért. Az alábbi táblázat néhány fontos, előre definiált kivételt és mínuszt sorol fel

Kivétel Oracle hiba SQLCODE Leírás
ACCESS_INTO_NULL06530-6530Akkor kerül felvetésre, ha egy null objektumhoz automatikusan hozzárendelnek egy értéket.
CASE_NOT_FOUND06592-6592Akkor merül fel, amikor a WHEN záradékban szereplő választások egyike sem a CASE nyilatkozat van kiválasztva, és nincs ELSE záradék.
COLLECTION_IS_NULL06531-6531Akkor merül fel, amikor egy program megpróbálja az EXISTS-től eltérő gyűjtési módszereket alkalmazni egy inicializálatlan beágyazott táblához vagy varray-hez, vagy a program megpróbál értékeket rendelni egy inicializálatlan beágyazott tábla vagy varray eleméhez.
DUP_VAL_ON_INDEX00001-egyAkkor merül fel, amikor az ismétlődő értékeket megpróbálják egyedi indexű oszlopban tárolni.
INVALID_CURSOR01001-1001Akkor merül fel, ha olyan kurzor műveletet próbálnak végrehajtani, amely nem megengedett, például bezár egy kurzort.
ÉRVÉNYTELEN SZÁM01722-1722Akkor merül fel, ha egy karakterlánc számmá alakítása sikertelen, mert a karakterlánc nem érvényes számot képvisel.
LOGIN_DENIED01017-1017Akkor merül fel, amikor egy program érvénytelen felhasználónévvel vagy jelszóval próbál bejelentkezni az adatbázisba.
NEM TALÁLHATÓ ADAT01403+100Akkor emelkedik, amikor a SELECT INTO utasítás nem ad sorokat.
NOT_LOGGED_ON01012-1012Akkor merül fel, amikor adatbázis-hívást adnak ki anélkül, hogy csatlakozna az adatbázishoz.
PROGRAM_ERROR06501-6501Akkor merül fel, amikor a PL / SQL-nek van belső problémája.
ROWTYPE_MISMATCH06504-6504Akkor merül fel, amikor a kurzor egy inkompatibilis adattípussal rendelkező változó értékét szerzi be.
SELF_IS_NULL30625-30625A tag metódus meghívásakor felmerül, de az objektumtípus példányát nem inicializálták.
STORAGE_ERROR06500-6500Akkor merül fel, amikor a PL / SQL memóriája elfogy, vagy a memória sérült.
TOO_MANY_ROWS01422-1422Akkor emelkedik, ha a SELECT INTO utasítás egynél több sort ad vissza.
VALUE_ERROR06502-6502Aritmetikai, konvertálási, csonkítási vagy méretkorlátozási hiba esetén felmerül.
ZERO_DIVIDE014761476Akkor merül fel, ha megpróbálnak egy számot nullával felosztani.

Példa

ELJÁRÁS LÉTREHOZÁSA vagy CSERÉJE add_new_student (diák _id_in SZÁMBAN, hallgató _name_in VARCHAR2-ben) KEZDŐDIK INSERT INTO hallgató (diák _id, hallgató _name) ÉRTÉKEK (hallgató _id_in, tanuló _neve_in) KIVÉTEL MIKOR DUP_VAL_ON_INDIN1_Text_Továbbít ' ) AMIKOR MÁSIK FELADJA_Application_error (-20002, 'Hiba történt.') VÉGE

Ebben a cikkben továbblépve a PL / SQL-ben történő kivételkezelésről, értsük meg, melyek a meg nem nevezett rendszerkivételek.

Névtelen rendszerkivételek

Azok a rendszerkivételek, amelyeknek az Oracle nem rendelkezik névvel, név nélküli rendszerkivételek néven ismertek. Ezek a kivételek nem fordulnak elő gyakran, és kóddal és hozzá tartozó üzenettel íródnak.

A meg nem nevezett rendszerkivételek alapvetően kétféleképpen kezelhetők:

1. A WHEN OTHERS kivételkezelő használata

2. A kivételkód társítása egy névhez és megnevezett kivételként történő használata.

Néhány lépés a név nélküli rendszerkivételek esetében:

  • Növelje őket hallgatólagosan.
  • Abban az esetben, ha akkor nem a „WHEN Others” -ban kezelik őket, kifejezetten kezelni kell őket.
  • A kivétel kifejezett kezelése érdekében deklarálhatók a Pragma EXCEPTION_INIT használatával, és a kivétel szakaszban a felhasználó által megadott kivétel nevére hivatkozva kezelhetők.

A cikk később tartalmaz egy példát a meg nem nevezett kivételek kezelésére a Pragma EXCEPTION_INIT használatával. Ebben a cikkben továbblépve a PL / SQL-ben történő kivételkezelésről, értsük meg a felhasználó által definiált kivételeket.

Felhasználó által meghatározott

Az összes többi programozási nyelvhez hasonlóan az Oracle is lehetővé teszi a hirdetések saját kivételek bevezetését. A rendszer által definiált kivételektől eltérően ezeket a kivételeket a PL / SQL blokk kifejezetten felveti.

A felhasználó által definiált kivételek deklarálásának lépései az Oracle adatbázisban

A felhasználó által definiált kivételeket az Oracle adatbázisban a következő három módon definiálhatjuk:

  • A EXCEPTION típusú változó használata

Itt deklarálhatunk egy felhasználó által meghatározott kivételt az EXCEPTION változó deklarálásával adattípus kódunkban, és kifejezetten emeljük fel a programunkban a RAISE utasítás használatával.

  • A PRAGMA EXCEPTION_INIT függvény használata

Az EXCEPTION adattípus változójával meghatározhatunk egy nem előre definiált hibaszámot

  • RAISE_APPLICATION_ERROR módszerrel

Ezzel a módszerrel deklarálhatunk egy felhasználó által meghatározott kivételt saját testreszabott hibaszámunkkal és üzenetünkkel.

Mostanáig nagyjából elképzelhető, hogy miként emelhetjük a felhasználó által meghatározott kivételeket a PL / SQL-ben. A fent említett módszerek mindegyikéről megismerkedünk példákkal a jelen cikkben a PL / SQL kivételkezelésről.

Ebben a cikkben folytassuk a felhasználó által definiált kivételkezelés bemutatásával.

A felhasználó által definiált kivételek bemutatása

Ebben a cikkben folytatva a PL / SQL kivételkezelését, hadd értsük meg, hogyan kell használni az EXCEPTION típusú változót.

A EXCEPTION típusú változó használata

A felhasználó által meghatározott kivétel deklarálásának folyamata három részre oszlik, és ez a 3 rész:

  • Nyújtsa be a változó kivétel adattípusát
  • Emelje a Kivételt
  • Kezelje a Kivételt

Írjunk egy kódot a fenti lépések részletes bemutatásához.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

A fenti deklarációs blokkban négy változó áll rendelkezésünkre, amelyek közül az első három normál szám adattípus változó, a negyedik pedig ex_DivZero a különleges kivétel adattípus változó. A negyedik a felhasználó által definiált kivétel.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Ennek a névtelen blokknak a fenti végrehajtási része csak akkor lép működésbe, ha az osztó értéke 0. Ha az osztó nulla, mint esetünkben, akkor a hiba felmerül, és a program vezérlése kihagyja az összes következő lépést, és meg fogja találni a hozzá tartozó kivételkezelőt. Abban az esetben, ha talál másokat, ennek megfelelően hajtja végre a műveletet, különben vagy leállítja a programot, vagy egy kezeletlen rendszer által definiált hibával kér bennünket.

java a ciklus program példáihoz
KIVÉTEL MIKOR ex_DivZero AKKOR DBMS_OUTPUT.PUT_LINE (‘HIBA, Az osztó nem lehet nulla’)

Ez a kivételkezelő. Amint a felhasználó megadja az osztót 0-ként, a rendszer kéri a fenti üzenetláncot.

Végleges kód:

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.ult_változat_változat_változat_változat} = 0 AKKOR EMELD ex-DivZero END IF Var_rezult: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Ebben a cikkben továbblépve a PL / SQL-ben történő kivételkezelésről, értsük meg, hogyan kell használni a PRAGMA_EXCEPTION_INIT metódust.

A PRAGMA EXCEPTION_INIT függvény használata

Ban,-ben PRAGMA EXCEPTION_INIT függvény, a kivétel neve egy Oracle hibaszámhoz van társítva. Ez a név felhasználható a hiba kivételkezelőjének megtervezéséhez.Hatalmas projektek esetén, sok felhasználó által definiált hibával a PRAGMA EXCEPTION_INIT a leghasznosabb és legmegfelelőbb módszer.

Szintaxis:

PRAGMA EXCEPTION_INIT (kivétel_név, -Oracle_error_szám)

Példa

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BULIN NULL - Néhány művelet ORA-00060 hibát okoz KIVÉTEL MIKOR deadlock_detected THEN NULL - kezeli a hibát END

A PRAGMA EXCEPTION_INIT azt mondja a fordítónak, hogy a kivétel nevét társítsa egy Oracle hibaszámhoz, amint azt korábban említettük. Ez lehetővé teszi, hogy név szerint hivatkozhasson minden belső kivételre, és írjon hozzá egy konkrét kezelőt. Ha hibaüzenetet vagy hibaüzenet-sorrendet lát, akkor a tetején található az, amely csapdába eshet és kezelhető.

Ebben a cikkben folytatva a PL / SQL kivételkezelését, értsük meg, hogyan kell használni a RAISE_APPLICATION_ERROR metódust.

RAISE_APPLICATION_ERROR módszerrel

Ez egy olyan eljárás, amely az oracle szoftverrel van beépítve. Ennek az eljárásnak a segítségével társíthatunk egy hibaszámot egy egyedi hibaüzenettel. A hiba számát és az egyedi hibaüzenetet egyaránt kombinálva olyan hibasztring állítható elő, amely hasonlít azokhoz az alapértelmezett hibasorozatokhoz, amelyeket az Oracle hiba esetén észlel. A RAISE_APPLICATION_ERROR eljárás a DBMS_STANDARD csomagban található

Szintaxis

raise_application_error (hibaszám, üzenet [, IGAZ])

Példa

/ * Trg_emp_detail_chk trigger jön létre. * / TRIGGER LÉTREHOZÁSA VAGY CSERÉJE trg_emp_detail_chk / * A trigger időzítése az EMPLOYEES táblában UPDATE ELŐTT van deklarálva. * / UPDATE ON alkalmazottak előtt DECLARE DECLARE a rendszeridő napja szombat vagy vasárnap, vagy sem. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') AKKOR rais_application_error (-20000, 'Ön nem jogosult erre bármilyen módosítás a hétvégén !! ') / * A rais_application_error eljárást az első paraméter -2000000, a második paramétert alapértelmezett szöveggel hívjuk meg, amely kijelenti, hogy a felhasználó nem jogosult semmilyen módosításra a hétvégén. * / VÉGE HA VÉGE

Ezzel a „Kivételek kezelése PL / SQL-ben” című cikk végére értünk. Remélem, hogy ezt a témát jól megértették és segítettek. Próbálja meg megírni saját kódjait, és beépíteni a cikkben ismertetett módszereket.

Ha szakemberektől szeretné kiképezni ezt a technológiát, választhatja az edureka strukturált képzését! Nézd meg ezt az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Ez a kurzus megtanítja Önt az adatok kezelésére és a MySQL adatbázis kezelésére vonatkozó alapvető fogalmakra, valamint fejlett eszközökre és technikákra. Magában foglalja a gyakorlati tanulást olyan fogalmakról, mint MySQL Workbench, MySQL Server, adatmodellezés, MySQL csatlakozó, adatbázis tervezés, MySQL parancssor, MySQL függvények stb. A képzés végén képes lesz létrehozni és adminisztrálni saját MySQL adatbázisát és kezelni. adat.

Van egy kérdésünk? Kérjük, említse meg a „Kivételek kezelése a PL / SQL-ben” cikk megjegyzés szakaszában, és amint lehetséges, kapcsolatba lépünk Önnel.