Naučte se, jak zacházet s výjimkami v PL / SQL



Tento článek je komplexním průvodcem, jak provádět zpracování výjimek v PL / SQL, diskutováním o různých typech výjimek nabízených v PL / SQL.

Pokud jste programátor, můžete být obeznámeni s koncepcí zpracování výjimek, která je nedílnou součástí všech . Protože chyby jsou nevyhnutelné a i ti nejchytřejší z nás mohou dělat chyby při psaní kódu, musíme být obeznámeni s tím, jak s nimi zacházet. V tomto článku se budeme učit zejména o zpracování výjimek v PL / SQL.

Zpracování výjimek SQL v PL / SQL-EdurekaNíže jsou uvedena témata v tomto článku:





Co je to výjimka?

Jakýkoli abnormální stav nebo událost, která přeruší normální tok našich programových instrukcí za běhu nebo jednoduše řečeno, výjimkou je chyba.

Syntaxe zpracování výjimek v PL / SQL

PROHLÁŠENÍ ZAČÍNÁTE VÝJIMKU KDYŽ výjimka1 POTOM výjimka1-manipulace-příkazy KDY výjimka2 POTOM výjimka2-manipulace-příkazy KDY výjimka3 PAK výjimka3-manipulace-příkazy ........ KDY ostatní PAK výjimka3-manipulace-příkazy KONEC

Zde můžeme uvést tolik výjimek, kolik chceme zpracovat. Výchozí výjimka bude zpracována pomocí „KDY ostatní POTOM“



Příklad zpracování výjimek v PL / SQL

Níže uvedený program zobrazuje jméno a adresu studenta, jehož ID je uvedeno. Protože v naší databázi není žádný student s hodnotou ID 8, program vyvolá běhovou výjimku NO_DATA_FOUND, která je zachycena v bloku VÝJIMKY.

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 ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Location:' || s_loc) VÝJIMKA KDY no_data_found POTOM dbms_output.put_line ('Žádný takový student!') KDY ostatní POTOM dbms_output.put_line ('Jejda, chyba!') KONEC

Výstup

Žádný takový student! Procedura PL / SQL byla úspěšně dokončena.

Zde můžeme uvést tolik výjimek, kolik chceme zpracovat. Výchozí výjimka bude zpracována pomocí „ KDY ostatní POTOM ''

Typy výjimek v PL / SQL

  • Systém definován
  • Uživatel vzdoroval

Dále v tomto článku o zpracování výjimek v PL / SQL pojďme podrobně diskutovat o obou těchto typech.



Systém definován

Implicitně definované a udržované serverem Oracle, tyto výjimky jsou definovány hlavně ve standardním balíčku Oracle. Kdykoli dojde k výjimce uvnitř programu, server Oracle se shoduje a identifikuje příslušnou výjimku z dostupné sady výjimek dostupné ve standardním balíčku Oracle. V zásadě jsou tyto výjimky předdefinovány PL / SQL který se zvedne KDYŽ je porušeno konkrétní pravidlo databáze .

The Systémově definované výjimky jsou dále rozděleny do dvou kategorií:

  • Pojmenované systémové výjimky
  • Nejmenované systémové výjimky

Pojmenované výjimky systému

Pojmenované výjimky PL / SQL jsou pojmenované ve standardním balíčku PL / SQL , proto vývojář nemusí ve svém kódu definovat výjimky PL / SQL. PL / SQL poskytuje mnoho předdefinovaných pojmenovaných výjimek, které se provádějí, když program naruší jakékoli databázové pravidlo. V následující tabulce je uvedeno několik důležitých předdefinovaných výjimek & minus

Výjimka Chyba Oracle SQLCODE Popis
ACCESS_INTO_NULL06530-6530Vyvolá se, když je objektu null automaticky přiřazena hodnota.
CASE_NOT_FOUND06592-6592Vyvolá se, když žádná z možností v klauzuli WHEN a Prohlášení CASE je vybrána a neexistuje žádná klauzule ELSE.
COLLECTION_IS_NULL06531-6531Vyvolá se, když se program pokusí použít jiné metody sběru než EXISTUJE na neinicializovanou vnořenou tabulku nebo varray, nebo se program pokusí přiřadit hodnoty prvkům neinicializované vnořené tabulky nebo varray.
DUP_VAL_ON_INDEX00001-jedenVyvolá se při pokusu o uložení duplicitních hodnot do sloupce s jedinečným indexem.
INVALID_CURSOR01001-1001Vyvolá se při pokusech o provedení operace kurzoru, která není povolena, například při zavření neotevřeného kurzoru.
NEPLATNÉ ČÍSLO01722-1722Vyvolá se, když selže převod řetězce znaků na číslo, protože řetězec nepředstavuje platné číslo.
LOGIN_DENIED01017-1017Vyvolá se, když se program pokusí přihlásit do databáze s neplatným uživatelským jménem nebo heslem.
NENALEZENA ŽÁDNÁ DATA01403+100Vyvolá se, když příkaz SELECT INTO nevrátí žádné řádky.
NOT_LOGGED_ON01012-1012Vyvolá se, když je vydáno volání databáze bez připojení k databázi.
PROGRAM_ERROR06501-6501Vyvolá se, když má PL / SQL interní problém.
ROWTYPE_MISMATCH06504-6504Vyvolá se, když kurzor načte hodnotu v proměnné, která má nekompatibilní datový typ.
SELF_IS_NULL30625-30625Vyvolá se při vyvolání členské metody, ale instance typu objektu nebyla inicializována.
STORAGE_ERROR06500-6500Vyvolá se, když PL / SQL došla paměť nebo byla paměť poškozena.
TOO_MANY_ROWS01422-1422Vyvolá se, když příkaz SELECT INTO vrátí více než jeden řádek.
VALUE_ERROR06502-6502Vyvolá se, když dojde k chybě aritmetiky, převodu, zkrácení nebo omezení velikosti.
ZERO_DIVIDE014761476Vyvolá se při pokusu o vydělení čísla nulou.

Příklad

VYTVOŘIT NEBO VYMĚNIT POSTUP add_new_student (student _id_in V ČÍSLE, student _name_in V VARCHAR2) ZAČÍNÁ VLOŽIT DO studenta (student _id, student _name) HODNOTY (student _id_in, student _name_in) VÝJIMKA, KDY DUP_VAL_ON_INDEX THENer_aplikace '( ) KDY OSTATNÍ POTOM raise_application_error (-20002, 'došlo k chybě.') END

Pohybující se v tomto článku o zpracování výjimek v PL / SQL, pojďme pochopit, jaké jsou nepojmenované systémové výjimky.

Nejmenované systémové výjimky

Systémové výjimky, pro které Oracle nemá název, se označují jako nepojmenované systémové výjimky. Tyto výjimky se nevyskytují často a jsou psány s kódem a přidruženou zprávou.

V zásadě existují dva způsoby, jak zvládnout nepojmenované systémové výjimky:

jak používat jmenný prostor v C ++

1. Použití obslužné rutiny výjimky WHEN OTHERS

2. Přiřazení kódu výjimky k názvu a jeho použití jako pojmenované výjimky.

Některé kroky pro nepojmenované systémové výjimky jsou:

  • Implicitně je zvedněte.
  • Pokud s nimi není zacházeno v části „KDY ostatní“, musí se s nimi zacházet výslovně.
  • Chcete-li výjimku zpracovat explicitně, mohou být deklarovány pomocí Pragma EXCEPTION_INIT a zpracovány odkazem na uživatelsky definovaný název výjimky v sekci výjimek.

Příklad zpracování nepojmenovaných výjimek pomocí aplikace Pragma EXCEPTION_INIT je uveden dále v článku. Pohybující se v tomto článku o zpracování výjimek v PL / SQL, pojďme pochopit Uživatelem definované výjimky.

Definováno uživatelem

Stejně jako všechny ostatní programovací jazyky vám Oracle také umožňuje deklarovat implementaci svých vlastních výjimek. Na rozdíl od výjimek definovaných systémem jsou tyto výjimky vyvolány explicitně v bloku PL / SQL.

Kroky k deklaraci uživatelem definovaných výjimek v databázi Oracle

Uživatelem definované výjimky v databázi Oracle můžeme definovat následujícími 3 způsoby:

  • Použití proměnné typu VÝJIMKA

Zde můžeme deklarovat uživatelem definovanou výjimku deklarováním proměnné EXCEPTION datový typ v našem kódu a explicitně jej zvýšit v našem programu pomocí příkazu RAISE.

  • Pomocí funkce PRAGMA EXCEPTION_INIT

Můžeme definovat nepředdefinované číslo chyby s proměnnou datového typu VÝJIMKA

  • Pomocí metody RAISE_APPLICATION_ERROR

Pomocí této metody můžeme deklarovat uživatelem definovanou výjimku s naším vlastním přizpůsobeným číslem chyby a zprávou.

Doposud jste možná měli přibližnou představu o tom, jak můžeme v PL / SQL zvyšovat uživatelem definované výjimky. O každé z výše zmíněných metod se dozvíme s příklady dále v tomto článku o zpracování výjimek v PL / SQL.

Dále v tomto článku pokračujme s ukázkami zpracování výjimek definovaných uživatelem.

Demonstrace uživatelsky definovaných výjimek

Pohybující se v tomto článku o Zpracování výjimek v PL / SQL, pojďme pochopit, jak používat proměnnou typu VÝJIMKA.

Použití proměnné typu VÝJIMKA

Proces deklarace uživatelem definované výjimky je rozdělen do tří částí a tyto 3 části jsou:

  • Deklarujte datový typ proměnné výjimky
  • Zvyšte výjimku
  • Zpracovat výjimku

Napíšeme kód, který podrobně předvede výše uvedené kroky.

DECLARE var_dividendové ČÍSLO: = 10 var_divisor ČÍSLO: = 0 var_výsledek NUMBER ex-DivZero VÝJIMKA

Ve výše uvedeném deklaračním bloku máme čtyři proměnné, z nichž první tři jsou proměnné datového typu s normálním počtem a čtvrtá, která je ex_DivZero, je proměnná datového typu se speciální výjimkou. Čtvrtý je naše uživatelem definovaná výjimka.

jak nainstalovat php na Windows
DECLARE var_dividendové ČÍSLO: = 10 var_divisor ČÍSLO: = 0 var_výsledek NUMBER ex-DivZero VÝJIMKA

Výše uvedená část provádění tohoto anonymního bloku vstoupí do činnosti pouze v případě, že dělitel je 0. Pokud je dělitel nulový, jako je tomu v našem případě, dojde k chybě a kontrola programu přeskočí všechny další kroky a bude hledat odpovídající obsluhu výjimek. V případě, že najde jiné, provede příslušnou akci, jinak program buď ukončí, nebo nás vyzve k neošetřené chybě definované systémem.

VÝJIMKA KDYŽ ex_DivZero POTOM DBMS_OUTPUT.PUT_LINE („CHYBA, dělitel nemůže být nula“)

Toto je obsluha výjimky. Jakmile uživatel zadá dělitel jako 0, zobrazí se výzva k výše uvedenému řetězci zprávy.

Konečný 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.PUT_LINE 'Result' = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

V tomto článku o zpracování výjimek v PL / SQL pojďme pochopit, jak používat metodu PRAGMA_EXCEPTION_INIT.

Pomocí funkce PRAGMA EXCEPTION_INIT

V Funkce PRAGMA EXCEPTION_INIT, název výjimky je spojen s číslem chyby Oracle. Tento název lze použít při navrhování obslužné rutiny výjimky pro chybu.Pro velké projekty s mnoha uživatelsky definovanými chybami je PRAGMA EXCEPTION_INIT nejužitečnější a nejvhodnější metodou.

Syntax:

PRAGMA EXCEPTION_INIT (název_výjimky, -číslo_erroru)

Příklad

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Některé operace, které způsobí chybu ORA-00060 EXCEPTION WHEN deadlock_detected THEN NULL - zpracovat chybu KONEC

PRAGMA EXCEPTION_INIT říká kompilátoru, aby přidružil název výjimky k číslu chyby Oracle, jak bylo uvedeno výše. Umožňuje vám odkázat na jakoukoli interní výjimku podle názvu a napsat pro ni konkrétní obslužný program. Když uvidíte zásobník chyb nebo posloupnost chybových zpráv, ten nahoře je ten, který může být zachycen a zpracován.

V tomto článku o zpracování výjimek v PL / SQL pojďme pochopit, jak používat metodu RAISE_APPLICATION_ERROR.

Pomocí metody RAISE_APPLICATION_ERROR

Jedná se o postup, který je součástí softwaru Oracle. Pomocí tohoto postupu můžeme přiřadit číslo chyby k vlastní chybové zprávě. Kombinací čísla chyby a vlastní chybové zprávy lze vytvořit chybový řetězec, který vypadá podobně jako výchozí chybové řetězce, které se zobrazí Oracle, když dojde k chybě. Procedura RAISE_APPLICATION_ERROR se nachází v balíčku DBMS_STANDARD

Syntax

raise_application_error (error_number, message [, TRUE])

Příklad

/ * Je vytvořen spouštěč trg_emp_detail_chk. * / VYTVOŘIT NEBO VYMĚNIT TRIGGER trg_emp_detail_chk / * Načasování spouštěče je deklarováno jako PŘED AKTUALIZACÍ v tabulce ZAMĚSTNANCI. * / Před AKTUALIZACÍ NA ZAMĚSTNANCE VYHLÁSIT VÝJIMKU ZAČÍNÁ VÝJIMKA / * Začátek podmínky den systémového času je sobota nebo neděle, nebo ne. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN raise_application_error (-20000, 'You are not authorized to do jakákoli změna o víkendech !! ') / * Procedura raise_application_error je volána s první hodnotou parametru jako -20000 a druhým parametrem s výchozím textem uvádějícím, že uživatel není oprávněn provádět žádné úpravy o víkendech. * / END IF END

Tímto se dostáváme na konec tohoto článku o „Zpracování výjimek v PL / SQL“. Doufám, že toto téma je dobře pochopeno a pomohlo vám. Zkuste napsat vlastní kódy a začlenit metody vysvětlené v tomto článku.

Pokud se chcete nechat vyškolit od profesionálů v této technologii, můžete se rozhodnout pro strukturované školení od edureka! Podívejte se na to Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Tento kurz vás naučí základním konceptům a pokročilým nástrojům a technikám pro správu dat a správu databáze MySQL. Zahrnuje praktické učení o konceptech jako MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command line, MySQL Functions atd. Na konci školení budete moci vytvářet a spravovat vlastní MySQL databázi a spravovat data.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto článku „Zpracování výjimek v PL / SQL“ a my se vám ozveme co nejdříve.