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.
Az 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_NULL | 06530 | -6530 | Akkor kerül felvetésre, ha egy null objektumhoz automatikusan hozzárendelnek egy értéket. |
CASE_NOT_FOUND | 06592 | -6592 | Akkor 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_NULL | 06531 | -6531 | Akkor 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_INDEX | 00001 | -egy | Akkor merül fel, amikor az ismétlődő értékeket megpróbálják egyedi indexű oszlopban tárolni. |
INVALID_CURSOR | 01001 | -1001 | Akkor 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ÁM | 01722 | -1722 | Akkor 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_DENIED | 01017 | -1017 | Akkor 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Ó ADAT | 01403 | +100 | Akkor emelkedik, amikor a SELECT INTO utasítás nem ad sorokat. |
NOT_LOGGED_ON | 01012 | -1012 | Akkor merül fel, amikor adatbázis-hívást adnak ki anélkül, hogy csatlakozna az adatbázishoz. |
PROGRAM_ERROR | 06501 | -6501 | Akkor merül fel, amikor a PL / SQL-nek van belső problémája. |
ROWTYPE_MISMATCH | 06504 | -6504 | Akkor merül fel, amikor a kurzor egy inkompatibilis adattípussal rendelkező változó értékét szerzi be. |
SELF_IS_NULL | 30625 | -30625 | A tag metódus meghívásakor felmerül, de az objektumtípus példányát nem inicializálták. |
STORAGE_ERROR | 06500 | -6500 | Akkor merül fel, amikor a PL / SQL memóriája elfogy, vagy a memória sérült. |
TOO_MANY_ROWS | 01422 | -1422 | Akkor emelkedik, ha a SELECT INTO utasítás egynél több sort ad vissza. |
VALUE_ERROR | 06502 | -6502 | Aritmetikai, konvertálási, csonkítási vagy méretkorlátozási hiba esetén felmerül. |
ZERO_DIVIDE | 01476 | 1476 | Akkor 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.