Naučte sa, ako zaobchádzať s výnimkami v PL / SQL



Tento článok je komplexným sprievodcom o tom, ako vykonávať spracovanie výnimiek v PL / SQL, a to o rôznych typoch výnimiek ponúkaných v PL / SQL.

Ak ste programátor, mohli by ste byť oboznámení s konceptom spracovania výnimiek, ktorý je jeho neoddeliteľnou súčasťou . Pretože chyby sú nevyhnutné a aj tí najchytrejší z nás môžu robiť chyby pri písaní kódu, musíme byť oboznámení s tým, ako s nimi zaobchádzať. V tomto článku sa dozvieme najmä informácie o spracovaní výnimiek v PL / SQL.

Spracovanie výnimiek SQL v PL / SQL-EdurekaĎalej sú uvedené témy, ktorým sa tento článok venuje:





Čo je to výnimka?

Akákoľvek abnormálna podmienka alebo udalosť, ktorá preruší normálny tok našich programových pokynov za behu alebo jednoduchými slovami, výnimkou je chyba.

Syntax spracovania výnimiek v PL / SQL

VYHLASUJTE ZAČÍNAME VÝNIMKU, KEĎ výnimka1 POTOM výnimka1-manipulačné-vyhlásenia KEDY výnimka2 POTOM výnimka2-manipulačné-vyhlásenia KEDY výnimka3 POTOM výnimka3-manipulačné-príkazy ........ KEDY ďalšie POTOM výnimka3-manipulačné-výroky KONIEC

Tu môžeme uviesť toľko výnimiek, koľko chceme vybaviť. Predvolená výnimka sa spracuje pomocou reťazca „KEDY POTOM“



Príklad spracovania výnimiek v PL / SQL

Nasledujúci program zobrazuje meno a adresu študenta, ktorého identifikačné číslo je uvedené. Pretože v našej databáze nie je žiadny študent s hodnotou ID 8, program vyvolá výnimku za chodu NO_DATA_FOUND, ktorá je zachytená v bloku EXCEPTION.

DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type ZAČAŤ VYBERAŤ meno, lotion DO S_name, s_loc OD študentov, KDE id = s_id DBMS_OUTPUT.PUT_LINE ('Meno:' || s_name) DBMS_OUTPUT .PUT_LINE ('Location:' || s_loc) VÝJIMKA, KEDY no_data_found POTOM dbms_output.put_line ('Žiadny taký študent!') KEDY iní POTOM dbms_output.put_line ('Oops, Error!') END

Výkon

Žiadny taký študent! Procedúra PL / SQL bola úspešne dokončená.

Tu môžeme uviesť toľko výnimiek, koľko chceme vybaviť. Predvolená výnimka sa spracuje pomocou ‘ KEDY iní POTOM

Typy výnimiek v PL / SQL

  • Systém definovaný
  • Používateľ sa vzoprel

Ďalej v tomto článku o spracovaní výnimiek v PL / SQL , poďme diskutovať o oboch týchto typoch podrobne.



Systém definovaný

Tieto výnimky sú definované a udržiavané implicitne serverom Oracle a sú definované hlavne v štandardnom balíku Oracle. Kedykoľvek sa v programe vyskytne výnimka, server Oracle porovná a identifikuje príslušnú výnimku z dostupnej sady výnimiek dostupnej v štandardnom balíku Oracle. Tieto výnimky sú v zásade preddefinované v PL / SQL ktorý sa zdvihne KEDY je porušené konkrétne pravidlo databázy .

The Systémom definované výnimky sa ďalej delia na dve kategórie:

  • Pomenované systémové výnimky
  • Nepomenované systémové výnimky

Pomenovaný systém Výnimky

Pomenované výnimky PL / SQL sú pomenované v štandardnom balíku PL / SQL , takže vývojár nemusí vo svojom kóde definovať výnimky PL / SQL. PL / SQL poskytuje mnoho preddefinovaných pomenovaných výnimiek, ktoré sa vykonajú, keď program poruší akékoľvek databázové pravidlo. V nasledujúcej tabuľke je uvedených niekoľko dôležitých preddefinovaných výnimiek & mínus

Výnimka Chyba Oracle SQLCODE Popis
ACCESS_INTO_NULL06530-6530Vyvolá sa, keď sa prázdnemu objektu automaticky priradí hodnota.
CASE_NOT_FOUND06592-6592Vyvolá sa, keď žiadna z možností v klauzule WHEN z a Vyhlásenie CASE je vybratá a neexistuje klauzula ELSE.
COLLECTION_IS_NULL06531-6531Vyvolá sa, keď sa program pokúsi použiť iné spôsoby zhromažďovania ako EXISTUJE na neinicializovanú vnorenú tabuľku alebo varray, alebo keď sa program pokúsi priradiť hodnoty prvkom neinicializovanej vnorenej tabuľky alebo varray.
DUP_VAL_ON_INDEX00001-jedenVyvolá sa pri pokuse o duplicitné hodnoty uložené v stĺpci s jedinečným indexom.
INVALID_CURSOR01001-1001Vyvoláva sa pri pokusoch o vykonanie nepovolenej operácie kurzora, napríklad pri zatvorení neotvoreného kurzora.
ZLÉ ČÍSLO01722-1722Vyvolá sa, keď zlyhá prevod reťazca znakov na číslo, pretože reťazec nepredstavuje platné číslo.
LOGIN_DENIED01017-1017Zobrazí sa, keď sa program pokúsi prihlásiť do databázy pomocou neplatného používateľského mena alebo hesla.
NEBOLI NÁJDENÉ ŽIADNE DÁTA01403+100Vyvolá sa, keď príkaz SELECT INTO nevráti žiadne riadky.
NOT_LOGGED_ON01012-1012Vyvolá sa pri volaní databázy bez pripojenia k databáze.
PROGRAM_ERROR06501-6501Vyvolá sa, keď má PL / SQL interný problém.
ROWTYPE_MISMATCH06504-6504Vyvolá sa, keď kurzor získa hodnotu v premennej, ktorá má nekompatibilný dátový typ.
SELF_IS_NULL30625-30625Vyvolá sa pri vyvolaní členskej metódy, ale inštancia typu objektu nebola inicializovaná.
STORAGE_ERROR06500-6500Vyvolá sa, keď v pamäti PL / SQL došlo pamäť alebo bola pamäť poškodená.
TOO_MANY_ROWS01422-1422Vyvolá sa, keď príkaz SELECT INTO vráti viac ako jeden riadok.
VALUE_ERROR06502-6502Vyvolá sa, keď dôjde k chybe aritmetiky, konverzie, skrátenia alebo obmedzenia veľkosti.
ZERO_DIVIDE014761476Vyvolá sa pri pokuse o vydelenie čísla nulou.

Príklad

VYTVORIŤ ALEBO VYMENIŤ POSTUP add_new_student (študent _id_in V ČÍSLE, študent _name_in V VARCHAR2) ZAČÍNA VLOŽIŤ DO student (student _id, student _name) HODNOTY (student _id_in, student _name_in) VÝNIMKA, KEĎ DUP_VAL_ON_INDEX THENer_aplikacia ' ) KEDY ĎALŠIE POTOM raise_application_error (-20002, „vyskytla sa chyba.“) END

Ďalej v tomto článku o narábaní s výnimkami v PL / SQL poďme pochopiť, čo sú nepomenované systémové výnimky.

Nepomenované systémové výnimky

Systémové výnimky, pre ktoré Oracle nemá názov, sú známe ako nepomenované systémové výnimky. Tieto výnimky sa nevyskytujú často a sú písané s kódom a súvisiacou správou.

V zásade existujú dva spôsoby, ako zaobchádzať s nepomenovanými systémovými výnimkami:

porovnanie bábkohernej soli s bábkou

1. Pomocou obslužnej rutiny výnimky KEĎ ĎALŠÍ

2. Priradenie kódu výnimky k názvu a jeho použitie ako pomenovanej výnimky.

Niektoré kroky, ktoré sa uplatňujú pri nepomenovaných systémových výnimkách, sú:

  • Implicitne ich zdvihnite.
  • V prípade, že sa s nimi nezaobchádza v časti „KEĎ iní“, musí sa s nimi zaobchádzať výslovne.
  • Na výslovné spracovanie výnimky je možné ich deklarovať pomocou Pragma EXCEPTION_INIT a manipulovať s nimi odkazom na používateľom definovaný názov výnimky v sekcii výnimiek.

Príklad riešenia nepomenovaných výnimiek pomocou programu Pragma EXCEPTION_INIT je uvedený ďalej v článku. Ak v tomto článku pokračujeme o zaobchádzaní s výnimkami v PL / SQL, porozumieme používateľom definovaným výhovorkám.

Definované užívateľom

Rovnako ako všetky ostatné programovacie jazyky, aj Oracle vám umožňuje deklarovať implementáciu svojich vlastných výnimiek. Na rozdiel od Systémom definovaných výnimiek sú tieto výnimky výslovne vyvolané v bloku PL / SQL.

Kroky na vyhlásenie používateľom definovaných výnimiek v databáze Oracle

Užívateľom definované výnimky v databáze Oracle môžeme definovať nasledujúcimi 3 spôsobmi:

  • Použitie premennej typu VÝJIMKA

Tu môžeme deklarovať používateľom definovanú výnimku vyhlásením premennej EXCEPTION Dátový typ v našom kóde a explicitne ho zvýšiť v našom programe pomocou príkazu RAISE.

  • Pomocou funkcie PRAGMA EXCEPTION_INIT

Môžeme definovať preddefinované číslo chyby pomocou premennej VÝNIMKA dátového typu

  • Pomocou metódy RAISE_APPLICATION_ERROR

Pomocou tejto metódy môžeme deklarovať výnimku definovanú používateľom s našim vlastným prispôsobeným číslom chyby a správou.

Doteraz ste možno dostali približnú predstavu o spôsoboch, ako môžeme zvyšovať používateľom definované výnimky v PL / SQL. O každej z vyššie uvedených metód sa dozvieme s príkladmi ďalej v tomto článku o narábaní s výnimkami v PL / SQL.

Ďalej v tomto článku pokračujeme ukážkami spracovania výnimiek definovaných používateľom.

Ukážka výnimiek definovaných používateľom

Ďalej v tomto článku o spracovaní výnimiek v PL / SQL si vysvetlíme, ako používať premennú typu EXCEPTION.

Použitie premennej typu VÝJIMKA

Proces deklarovania používateľom definovanej výnimky je rozdelený do troch častí a tieto 3 časti sú:

  • Deklarujte dátový typ premennej výnimky
  • Zvýšiť výnimku
  • Spracujte výnimku

Napíšeme kód, ktorý podrobne demonštruje vyššie uvedené kroky.

DECLARE var_dividenda ČÍSLO: = 10 var_divízor ČÍSLO: = 0 var_výsledok NUMBER ex-DivZero VÝNIMKA

Vo vyššie uvedenom deklaračnom bloku máme štyri premenné, z ktorých prvé tri sú premenné dátového typu s normálnym počtom a štvrtá ex_DivZero je premenná dátového typu so špeciálnou výnimkou. Štvrtý je naša používateľom definovaná výnimka.

algoritmus triedenia v c ++
DECLARE var_dividenda ČÍSLO: = 10 var_divízor ČÍSLO: = 0 var_výsledok NUMBER ex-DivZero VÝNIMKA

Vyššie uvedená časť tohto anonymného bloku, ktorá sa bude vykonávať, vstúpi do platnosti, iba keď je deliteľ 0. Ak je deliteľ nulový, ako je to v našom prípade, chyba sa vyvolá a riadenie programu preskočí všetky ďalšie kroky a bude hľadať zodpovedajúci obslužný program výnimiek. V prípade, že nájde akékoľvek iné, vykoná príslušnú akciu, inak program buď ukončí, alebo nás vyzve k neošetrenej chybe definovanej systémom.

VÝNIMKA KEDY ex_DivZero POTOM DBMS_OUTPUT.PUT_LINE („CHYBA, deliteľ nemôže byť nula“)

Toto je obsluha výnimky. Hneď ako používateľ zadá deliteľ ako 0, zobrazí sa výzva k uvedenému reťazcu správy.

Konečný kód:

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero VÝNIMKA ZAČÍNAJTE IF var_divisor = 0 POTOM ZVÝŠIŤ ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT_PORT_LINE 'Result' = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Ak v tomto článku pokračujeme o zaobchádzaní s výnimkami v PL / SQL, pochopme, ako používať metódu PRAGMA_EXCEPTION_INIT.

Pomocou funkcie PRAGMA EXCEPTION_INIT

V Funkcia PRAGMA EXCEPTION_INIT, názov výnimky je spojený s číslom chyby Oracle. Tento názov je možné použiť pri navrhovaní obslužného programu výnimky pre chybu.Pre veľké projekty s mnohými chybami definovanými používateľmi je najužitočnejšou a najvhodnejšou metódou PRAGMA EXCEPTION_INIT.

Syntax:

PRAGMA EXCEPTION_INIT (meno_výnimky, -číslo_oblasti_origenta)

Príklad

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Niektorá operácia, ktorá spôsobí chybu ORA-00060 EXCEPTION WHEN deadlock_detected THEN NULL - chyba END

PRAGMA EXCEPTION_INIT hovorí kompilátoru, aby priradil názov výnimky k číslu chyby Oracle, ako už bolo spomenuté. Umožňuje vám odkazovať na ľubovoľné interné výnimky podľa názvu a písať pre ne konkrétny obslužný program. Keď uvidíte chybový zásobník alebo postupnosť chybových správ, hore je tá, ktorú je možné zachytiť a spracovať.

Ďalej v tomto článku venovanom spracovaniu výnimiek v PL / SQL pochopíme, ako používať metódu RAISE_APPLICATION_ERROR.

Pomocou metódy RAISE_APPLICATION_ERROR

Je to postup, ktorý je zabudovaný do softvéru Oracle. Pomocou tohto postupu môžeme priradiť číslo chyby k vlastnej chybovej správe. Kombináciou čísla chyby a vlastnej chybovej správy je možné zostaviť chybový reťazec, ktorý vyzerá podobne ako predvolené chybové reťazce, ktoré sa pri výskyte chyby zobrazia pomocou Oracle. Procedúra RAISE_APPLICATION_ERROR sa nachádza v balíku DBMS_STANDARD

Syntax

raise_application_error (error_number, message [, TRUE])

Príklad

/ * Vytvorí sa spúšťač trg_emp_detail_chk. * / VYTVORIŤ ALEBO VYMENIŤ SPUŠŤ trg_emp_detail_chk / * Načasovanie spúšťača sa v tabuľke ZAMESTNANCI deklaruje ako PRED AKTUALIZÁCIOU. * / Pred AKTUALIZÁCIOU NA ZAMESTNANCI VYHLASUJTE povolenie_odložené S VÝNIMKOU ZAČÍNAME / * Začiatok podmienky deň systémového času je sobota alebo nedeľa alebo nie. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Sobota', 'Sunday') POTOM raise_application_error (-20000, 'Nemáte oprávnenie robiť akákoľvek zmena cez víkendy !! ') / * Procedúra raise_application_error sa volá s prvou hodnotou parametra ako -20000 a druhým parametrom s predvoleným textom, ktorý hovorí, že užívateľ nemá oprávnenie robiť akékoľvek úpravy cez víkendy. * / END IF END

Týmto sa dostávame na koniec tohto článku o „Spracovaní výnimiek v PL / SQL“. Dúfam, že táto téma je pochopená dobre a pomohla vám. Skúste si napísať svoje vlastné kódy a zahrnúť metódy vysvetlené v tomto článku.

Ak sa chcete nechať vyškoliť od profesionálov v tejto technológii, môžete sa rozhodnúť pre štruktúrované školenie z edureka! Skontrolujte toto autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Tento kurz vás naučí základné koncepty a pokročilé nástroje a techniky na správu údajov a správu databázy MySQL. Zahŕňa praktické učenie o konceptoch ako MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command line, MySQL Functions atď. Na konci školenia budete môcť vytvárať a spravovať svoju vlastnú MySQL databázu a spravovať ju údaje.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov v tomto článku „Spracovanie výnimiek v PL / SQL“ a my sa vám ozveme čo najskôr.