complete guide pl sql exception handling with examples
Tento výukový program vysvetľuje obsluhu výnimiek PL SQL a súvisiace koncepty, ako sú typy výnimiek, používateľom definované a systémovo definované výnimky, ako vyvolať výnimku atď.:
V Formát PL / SQL Datetime z Séria PL / SQL , dozvedeli sme sa o niektorých užitočných funkciách okolo Datetime, Timestamp a Interval
V tomto článku sa budeme zaoberať spracovaním výnimiek v PL SQL. Preskúmame tiež výhody výnimiek a spôsoby, ako ich vyvolať.
Začnime s poznatkami !!
Čo sa dozviete:
Spracovanie výnimiek PL SQL
Chyba alebo výstražná udalosť sa nazýva výnimka. Vyskytuje sa počas vykonávania programu PL / SQL za behu programu. PL / SQL má mechanizmy na zvládnutie týchto výnimočných podmienok pomocou bloku kódu EXCEPTION, kde je definované, ako čeliť chybovým stavom.
Existujú dva typy výnimiek. Sú uvedené nižšie:
- Užívateľom definované výnimky.
- Systémom definované výnimky.
Niektoré populárne výnimky definované systémom sú nedostatok pamäte a delenie nulou, s názvami ako STORAGE_ERROR a ZERO_DIVIDE. Užívateľom definované výnimky sa deklarujú v balíku, podprograme alebo v deklaračnej časti kódu PL / SQL a mali by sa im priradiť názvy.
Akonáhle dôjde k výnimke, prirodzený tok vykonávania sa zastaví a potom vykonanie ukáže na časť výnimky kódu PL / SQL. Zatiaľ čo výnimky definované systémom sú predvolene vyvolávané, tie definované používateľom musia byť výslovne vyvolané kľúčovým slovom RAISE.
Spracovanie výnimiek teda pomáha vyrovnať sa s chybami, ktoré sa vyskytnú počas vykonávania behu programu, a nie počas kompilácie programu.
Výhody manipulácie s výnimkami
Výhody sú uvedené nižšie:
- Ak náš kód nemá spracovanie výnimiek, potom zakaždým, keď vykonáme príkaz, musíme overiť chyby pri vykonávaní.
- Ak sa v našom kóde vyhneme spracovaniu výnimiek, skutočné chyby sa minú, čo vedie k ďalším chybám.
- Spracovanie výnimiek umožňuje preskočenie viacerých overení v kóde.
- Poskytuje lepšiu čitateľnosť kódu izoláciou spracovávačov chýb v kóde.
Syntax spracovania výnimiek:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Predvolená výnimka sa vykonáva s KEDY iní POTOM.
Uvažujme o pomenovanej tabuľke OBČAN .
SELECT * FROM CITIZEN;
Tabuľku CITIZEN sme vytvorili pomocou nižšie uvedeného príkazu SQL.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Vložte hodnoty do tejto tabuľky s príkazmi SQL uvedenými nižšie:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementácia kódovania so spracovaním výnimiek:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
Výstup z vyššie uvedeného kódu:
Vo vyššie uvedenom kóde, pretože v tabuľke OBČAN nie sú žiadni občania vo veku 9 rokov, je vyvolaná výnimka za behu programu.
Zvýšiť výnimku v PL / SQL
Výnimku môžu vývojári vysloviť výslovne pomocou kľúčového slova RAISE.
Syntax zvyšovania výnimiek:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Tu exception_n je názov výnimky, ktorú zvyšujeme. Týmto spôsobom môžeme zvýšiť výnimky definované používateľom aj systémom.
Užívateľom definovaná výnimka
Vývojári si môžu vytvoriť vlastné výnimky a použiť ich na spracovanie chýb. Môžu byť vytvorené v deklaračnej časti podprogramu a sú prístupné iba v rámci tohto podprogramu.
Výnimku, ktorá sa vytvorí na úrovni balíka, je možné použiť pri každom prístupe k balíku. Užívateľom definovanú výnimku je možné zvýšiť pomocou kľúčového slova RAISE.
Syntax pre chybu definovanú používateľom je:
DECLARE exception_n EXCEPTION;
Tu je výnimka_n je názov výnimky, ktorú zvyšujeme. Výnimku teda môžeme vyhlásiť zadaním názvu, za ktorým nasleduje kľúčové slovo EXCEPTION. Výnimku je možné deklarovať podobným spôsobom, ako sa deklarujú premenné. Výnimkou je však neočakávaný stav, a nie údajová položka.
Rozsah výnimky v PL / SQL:
Pravidlá rozsahu pre výnimku PL / SQL sú uvedené nižšie:
- Výnimku nie je možné deklarovať viac ako raz v rovnakom bloku kódu. Rovnakú výnimku ale môžeme vyhlásiť v dvoch rôznych blokoch kódu.
- Výnimka deklarovaná v rámci bloku kódu je lokálna v rámci tohto bloku a globálna pre každý podblok.
- Ak vo vnútri čiastkového bloku znova deklarujeme globálnu výnimku, lokálna deklarácia má prednosť.
Zvážme opäť tabuľku s názvom OBČAN.
Implementácia kódu s používateľom definovanými výnimkami:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
Výstup z vyššie uvedeného kódu:
Preddefinovaná výnimka
Pri porušení pravidiel databázy alebo prekročení prahovej hodnoty závislej od systému sa automaticky vyvolá interná výnimka. Všetky tieto chyby majú jedinečné číslo a každá výnimka je definovaná ako meno. Napríklad, PL / SQL vyvolá preddefinovanú výnimku NO_DATA_FOUND, keď dotaz SELECT nezíska žiadne riadky.
Všetky preddefinované výnimky PL / SQL sú deklarované v balíku STANDARD, ktorý sa zaoberá prostredím PL / SQL.
Výnimka | Chyba Oracle | KÓD SQL | Popis |
---|---|---|---|
ZLÉ ČÍSLO | ČAS - 01722 | -1722 | Táto výnimka sa vyvolá, ak prevod na reťazec znakov na číslo neprejde, pretože reťazec predstavuje neplatné číslo. |
ACCESS_INTO_NULL | TERAZ - 06530 | -6530 | Táto výnimka sa vyvolá, ak je prázdnemu objektu prirodzene priradená hodnota. |
CASE_NOT_FOUND | TERAZ - 06592 | -6592 | Táto výnimka sa vyvolá, ak nie je vybraná žiadna z možností v klauzule WHEN a neexistuje klauzula ELSE. |
COLLECTION_IS_NULL | TERAZ - 06531 | -6531 | Táto výnimka sa vyvolá, keď sa kód pokúsi použiť metódy zhromažďovania okrem EXISTUJÚCE na vnorenú tabuľku alebo varray, ktorý nie je inicializovaný. Môže sa tiež zdvihnúť, ak sa náš kód pokúsi priradiť hodnoty vnorenej tabuľke alebo varray, ktorý nie je inicializovaný. |
DUP_VAL_ON_INDEX | ČAS - 00001 | -1 | Táto výnimka sa vyvolá, ak sa pokúsia uložiť duplicitné hodnoty do stĺpca, ktorý je obmedzený jedinečným indexom. |
CURSOR_ALREADY_OPEN | TERAZ - 06511 | -6511 | Táto výnimka sa vyvolá, ak sa náš kód pokúsi otvoriť už otvorený kurzor. |
INVALID_CURSOR | ČAS - 01001 | -1001 | Táto výnimka sa vyvolá, ak sa pokúsime vykonať nejaké operácie s kurzormi, ktoré nie sú povolené. Napríklad pokus o zatvorenie už zatvoreného kurzora. |
LOGIN_DENIED | ČAS - 01017 | -1017 | Táto výnimka sa vyvolá, ak sa program pokúsil prihlásiť do databázy pomocou nesprávneho používateľského mena a hesla. |
NEBOLI NÁJDENÉ ŽIADNE DÁTA | ČAS - 01403 | 100 | Táto výnimka sa vyvolá, ak dotaz SELECT nezíska žiadne riadky. |
NOT_LOGGED_ON | ČAS - 01012 | -1012 | Táto výnimka sa vyvolá, ak sa pokúsime vykonať databázovú operáciu bez jej pripojenia. |
PROGRAM_ERROR | ČAS - 06501 | -6501 | Táto výnimka sa vyvolá, ak program PL / SQL narazil na vnútornú chybu. |
ROWTYPE_MISMATCH | ČAS - 06504 | -6504 | Táto výnimka sa vyvolá, ak sa kurzor pokúsi vrátiť hodnoty do premennej s nekompatibilným dátovým typom. |
SELF_IS_NULL | TERAZ - 30625 | -30625 | Táto výnimka sa vyvolá, ak sa volá členská metóda bez inicializácie jej typu objektu. |
STORAGE_ERROR | TERAZ - 06500 | -6500 | Táto výnimka sa vyvolá, ak v programe PL / SQL došlo pamäť alebo sa jej pamäť pri vykonávaní poškodila. |
TOO_MANY_ROWS | ČAS - 01422 | -1422 | Táto výnimka sa vyvolá, ak dotaz SELECT načíta viac riadkov. |
SUBSCRIPT_BEYOND_COUNT | TERAZ - 06533 | -6533 | Táto výnimka sa vyvolá, ak je dolný index vyšší ako celkový počet prvkov v kolekcii. |
SUBSCRIPT_OUTSIDE_LIMIT | TERAZ - 06532 | -6532 | Táto výnimka sa vyvolá, ak je dolný index nad rozsahom prahových hodnôt. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Táto výnimka sa vyvolá, ak neprechádza prevod na reťazec znakov na univerzálne ID riadku, pretože reťazec znakov predstavuje neplatné ID riadku. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Táto výnimka sa vyvolá, ak Oracle čaká na zdroj. |
VALUE_ERROR | ORA-06502 | -6502 | Táto výnimka sa vyvolá, ak sa v našom programe vyskytne matematická chyba, chyba pri konvertovaní a skrátení. |
ZERO_DIVIDE | ORA-01476 | -1476 | Táto výnimka sa vyvolá, ak sa pokúsime rozdeliť číslo na 0. |
Často kladené otázky a odpovede
Otázka 1) Čo je preddefinovaná výnimka v PL / SQL?
Odpoveď: Preddefinovaná výnimka je vyvolaná PL / SQL automaticky, ak dôjde k porušeniu pravidiel databázy programom.
Otázka 2) Čo je spracovanie výnimiek PL / SQL a prečo je potrebné?
Odpoveď: Chyba alebo neočakávaná udalosť v programe sa nazýva Výnimka. Zastavuje normálny priebeh vykonávania programu. V PL / SQL sa s výnimkou zaobchádza v rámci bloku EXCEPTION v kóde a správna akcia proti tejto výnimke je opísaná vo vnútri tohto bloku.
Otázka č. 3) Čo sa myslí pod spracovaním výnimiek?
Odpoveď: Je to metóda reagovania na neočakávané udalosti, ktoré sa môžu vyskytnúť pri vykonávaní kódu.
aký je najlepší odstraňovač spyware
Otázka č. 4) Aké sú dve formy spracovania chýb?
Odpoveď: Zahŕňajú dve formy spracovania chýb chyba pri kompilácii a chyba za behu . Chyba spustenia sa stane počas vykonávania programu v dôsledku nesprávnych údajov alebo logiky. Chyby kompilácie sa zachytia počas kompilácie nášho kódu.
Otázka č. 5) Aký je rozdiel medzi chybou a výnimkou?
Odpoveď: Výnimkou sú incidenty, ktoré sa riešia pomocou bloku try / catch a je možné ich naraziť v čase kompilácie aj v čase vykonania programu. Na druhej strane sa chyby vyskytujú iba za behu programu.
Záver
V tomto tutoriáli sme podrobne diskutovali o niektorých základných konceptoch PL / SQL, ktoré sú nevyhnutné pre správu výnimiek v našich programoch.
Prebrali sme nasledujúce témy uvedené nižšie:
- Výnimky.
- Druhy výnimiek.
- Niektoré preddefinované výnimky.
V ďalšom tutoriáli sa budeme venovať transakciám PL / SQL, konceptom OOPS a mnohým ďalším súvisiacim témam.
Odporúčané čítanie
- Výukový program na spracovanie výnimiek C # s príkladmi kódu
- Výnimky Java a spracovanie výnimiek s príkladmi
- Balík PL SQL: Výukový program balíkov Oracle PL / SQL s príkladmi
- Spracovanie výnimiek v C ++
- Výukový program PL SQL pre začiatočníkov s príkladmi Čo je to PL / SQL
- Výukový program pre záznamy PL SQL s príkladmi