complete guide pl sql exception handling with examples
Tento výukový program vysvětluje zpracování výjimek PL SQL a související koncepty, jako jsou typy výjimek, uživatelem definované a systémově definované výjimky, jak vyvolat výjimku atd.:
v Formát datového času PL / SQL z Série PL / SQL , jsme se dozvěděli o některých užitečných funkcích kolem Datetime, Timestamp a Interval
V tomto článku probereme zpracování výjimek v PL SQL. Rovněž prozkoumáme výhody výjimek a způsoby, jak je vyvolat.
Začněme s učením !!
Co se naučíte:
Zpracování výjimek PL SQL
Chyba nebo varovná událost se nazývá výjimka. Dochází k němu během běhu programu PL / SQL. PL / SQL má mechanismy pro zpracování těchto výjimečných podmínek pomocí bloku VÝJIMKY kódu, kde je definováno, jak čelit chybovému stavu.
Existují dva typy výjimek. Jsou uvedeny níže:
- Uživatelem definované výjimky.
- Systémem definované výjimky.
Některé populární výjimky definované systémem jsou nedostatek paměti a dělení nulou, s názvy jako STORAGE_ERROR a ZERO_DIVIDE. Uživatelem definované výjimky jsou deklarovány v balíčku, podprogramu nebo v sekci deklarace bloku kódu PL / SQL a měly by jim být přiřazeny názvy.
Jakmile dojde k výjimce, přirozený tok provádění se zastaví a poté provádění ukazuje na část výjimky kódu PL / SQL. Zatímco ve výchozím nastavení jsou vyvolány výjimky definované systémem, ty definované uživatelem musí být vyvolány explicitně klíčovým slovem RAISE.
Zpracování výjimek tedy pomáhá vypořádat se s chybami, které se vyskytly během spuštění, a ne při kompilaci programu.
Výhody zpracování výjimek
Výhody jsou uvedeny níže:
technické dotazy a odpovědi na technické dotazy
- Pokud náš kód nemá zpracování výjimek, musíme pokaždé, když provedeme příkaz, ověřit chyby při provádění.
- Pokud se v našem kódu vyhneme zpracování výjimek, skutečné chyby budou zmeškány, což vede k dalším chybám.
- Zpracování výjimek umožňuje přeskočení více ověření v kódu.
- Poskytuje lepší čitelnost kódu izolací obslužných rutin chyb v kódu.
Syntaxe zpracování výjimek:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Výchozí výjimka se provádí pomocí KDY ostatní POTOM.
Uvažujme o pojmenované tabulce OBČAN .
SELECT * FROM CITIZEN;
Vytvořili jsme tabulku OBČAN pomocí níže uvedeného pří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 této tabulky s níže uvedenými příkazy SQL:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementace kódování se zpracováním výjimek:
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 výše uvedeného kódu:
Ve výše uvedeném kódu, protože v tabulce CITIZEN nejsou žádní občané ve věku 9 let, je vyvolána výjimka za běhu.
Zvýšit výjimku v PL / SQL
Výjimku mohou vývojáři výslovně vyvolat pomocí klíčového slova RAISE.
Syntaxe pro vyvolání výjimky:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Zde exception_n je název výjimky, kterou zvyšujeme. Tímto způsobem můžeme zvýšit výjimky definované uživatelem i systémem.
nedefinovaný odkaz na třídní funkci c ++
Uživatelem definovaná výjimka
Vývojáři mohou vytvářet své vlastní výjimky a používat je pro zpracování chyb. Lze je vytvořit v deklarační části podprogramu a lze k nim přistupovat pouze uvnitř tohoto podprogramu.
Výjimku, která je vytvořena na úrovni balíčku, lze použít při každém přístupu k balíčku. Uživatelem definovanou výjimku lze vyvolat pomocí klíčového slova RAISE.
Syntaxe uživatelem definované chyby je:
DECLARE exception_n EXCEPTION;
Tady je výjimka_n je název výjimky, kterou zvyšujeme. Můžeme tedy deklarovat výjimku zadáním názvu následovaného klíčovým slovem EXCEPTION. Výjimku lze deklarovat podobným způsobem, jako jsou deklarovány proměnné. Výjimkou je však neočekávaná podmínka, nikoli datová položka.
Rozsah výjimky v PL / SQL:
Pravidla rozsahu pro výjimku PL / SQL jsou uvedena níže:
- Výjimku nelze deklarovat více než jednou ve stejném bloku kódu. Ale můžeme deklarovat stejnou výjimku ve dvou různých blocích kódu.
- Výjimka deklarovaná v rámci bloku kódu je místní v rámci tohoto bloku a globální pro každý dílčí blok.
- Pokud znovu deklarujeme globální výjimku uvnitř dílčího bloku, lokální deklarace má přednost.
Zvažme znovu tabulku s názvem OBČAN.
Implementace kódu s uživatelem definovanými výjimkami:
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 výše uvedeného kódu:
Předem definovaná výjimka
Při porušení pravidel databáze nebo překročení prahové hodnoty závislé na systému je automaticky vyvolána interní výjimka. Všechny tyto chyby mají jedinečné číslo a každá výjimka je definována jako název. Například, PL / SQL vyvolá předdefinovanou výjimku NO_DATA_FOUND, když dotaz SELECT načte žádné řádky.
Všechny předdefinované výjimky PL / SQL jsou deklarovány v balíčku STANDARD, který se zabývá prostředím PL / SQL.
Výjimka | Chyba Oracle | KÓD SQL | Popis |
---|---|---|---|
NEPLATNÉ ČÍSLO | ČAS - 01722 | -1722 | Tato výjimka je vyvolána, pokud převod na řetězec znaků na číslo neprojde, protože řetězec představuje neplatné číslo. |
ACCESS_INTO_NULL | NYNÍ - 06530 | -6530 | Tato výjimka se vyvolá, pokud je objektu null přirozeně přiřazena hodnota. |
CASE_NOT_FOUND | NYNÍ - 06592 | -6592 | Tato výjimka se vyvolá, pokud není vybrána žádná z možností v klauzuli WHEN a neexistuje žádná klauzule ELSE. |
COLLECTION_IS_NULL | NYNÍ - 06531 | -6531 | Tato výjimka se vyvolá, když se kód pokusí použít metody kolekce kromě EXISTU na vnořenou tabulku nebo varray, který není inicializován. Může být také zvýšen, pokud se náš kód pokusí přiřadit hodnoty vnořené tabulce nebo varray, který není inicializován. |
DUP_VAL_ON_INDEX | ČAS - 00001 | -1 | Tato výjimka se vyvolá, pokud se pokusí duplicitní hodnoty uložit do sloupce, který je omezen jedinečným indexem. |
CURSOR_ALREADY_OPEN | NYNÍ - 06511 | -6511 | Tato výjimka se vyvolá, pokud se náš kód pokusí otevřít již otevřený kurzor. |
INVALID_CURSOR | ČAS - 01001 | -1001 | Tato výjimka je vyvolána, pokud se pokusíme provést některé operace s kurzory, které nejsou povoleny. Například pokus o zavření již zavřeného kurzoru. |
LOGIN_DENIED | ČAS - 01017 | -1017 | Tato výjimka se vyvolá, pokud se program pokusil přihlásit k databázi pomocí nesprávného uživatelského jména a hesla. |
NENALEZENA ŽÁDNÁ DATA | ČAS - 01403 | 100 | Tato výjimka se vyvolá, pokud dotaz SELECT nenačte žádné řádky. |
NOT_LOGGED_ON | ČAS - 01012 | -1012 | Tato výjimka se vyvolá, pokud se pokusíme provést databázovou operaci bez připojení k ní. |
PROGRAM_ERROR | ČAS - 06501 | -6501 | Tato výjimka se vyvolá, pokud program PL / SQL narazil na interní chybu. |
ROWTYPE_MISMATCH | ČAS - 06504 | -6504 | Tato výjimka se vyvolá, pokud se kurzor pokusí vrátit hodnoty do proměnné s nekompatibilním datovým typem. |
SELF_IS_NULL | NYNÍ - 30625 | -30625 | Tato výjimka je vyvolána, pokud je volána členská metoda bez inicializace jejího typu objektu. |
STORAGE_ERROR | NYNÍ - 06500 | -6500 | Tato výjimka se vyvolá, pokud v programu PL / SQL došla paměť nebo se její paměť při provádění poškodila. |
TOO_MANY_ROWS | ČAS - 01422 | -1422 | Tato výjimka se vyvolá, pokud dotaz SELECT načte více řádků. |
SUBSCRIPT_BEYOND_COUNT | NYNÍ - 06533 | -6533 | Tato výjimka je vyvolána, pokud je dolní index větší než celkový počet počtu prvků v kolekci. |
SUBSCRIPT_OUTSIDE_LIMIT | NYNÍ - 06532 | -6532 | Tato výjimka se vyvolá, pokud je dolní index nad prahovou hodnotou. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Tato výjimka se vyvolá, pokud převod na řetězec znaků na univerzální ID řádku neprojde, protože řetězec znaků představuje neplatné ID řádku. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Tato výjimka se vyvolá, pokud Oracle čeká na prostředek. |
VALUE_ERROR | ORA-06502 | -6502 | Tato výjimka se vyvolá, pokud v našem programu dojde k chybě matematického převodu nebo zkrácení. |
ZERO_DIVIDE | ORA-01476 | -1476 | Tato výjimka je vyvolána, pokud se pokusíme vydělit číslo 0. |
Často kladené otázky a odpovědi
Otázka č. 1) Co je předdefinovaná výjimka v PL / SQL?
Odpovědět: Pokud dojde k porušení pravidel databáze programem, PL / SQL vyvolá předem definovanou výjimku.
Otázka 2) Co je zpracování výjimek PL / SQL a proč je potřeba?
Odpovědět: Chyba nebo neočekávaná událost v programu se nazývá výjimka. Zastaví normální průběh provádění programu. V PL / SQL je výjimka zpracovávána v bloku VÝJIMKY v kódu a správná akce proti výjimce je popsána uvnitř tohoto bloku.
Otázka č. 3) Co se rozumí zpracováním výjimek?
Odpovědět: Jedná se o metodu reakce na neočekávané události, které mohou nastat při provádění kódu.
Otázka č. 4) Jaké jsou dvě formy zpracování chyb?
Odpovědět: Zahrnují dvě formy zpracování chyb chyba při kompilaci a chyba doby běhu . K chybě běhu dochází během provádění programu kvůli nesprávným datům nebo logice. Chyby kompilace jsou zachyceny během kompilace našeho kódu.
Otázka č. 5) Jaký je rozdíl mezi chybou a výjimkou?
nejlepší systémové nástroje pro Windows 10
Odpovědět: Výjimkou jsou incidenty, které se řeší pomocí bloku try / catch a lze je narazit jak v době kompilace, tak v době spuštění programu. Na druhou stranu k chybám dochází pouze za běhu.
Závěr
V tomto tutoriálu jsme podrobně diskutovali některé základní koncepty PL / SQL, které jsou nezbytné pro správu výjimek v našich programech.
Pokryli jsme následující témata uvedená níže:
- Výjimky.
- Druhy výjimek.
- Některé předdefinované výjimky.
V dalším kurzu probereme transakce PL / SQL, koncepty OOPS a mnoho dalších souvisejících témat.
Doporučené čtení
- Výukový program pro zpracování výjimek C # s příklady kódu
- Výjimky Java a zpracování výjimek s příklady
- Balíček PL SQL: Výukový program balíku Oracle PL / SQL s příklady
- Zpracování výjimek v C ++
- Výukový program PL SQL pro začátečníky s příklady | Co je to PL / SQL
- Výukový program pro záznamy PL SQL s příklady