Jak bylo uvedeno v úvodu do zpracování výjimek PL/SQL, existují tři způsoby, jak deklarovat uživatelem definované výjimky v Oracle PL/SQL. Mezi těmito třemi jsme již diskutovali a naučili se prvním způsobem v předchozím tutoriálu. Dnes v tomto blogu uděláme krok vpřed a podíváme se na druhý způsob deklarování uživatelem definované výjimky a naučíme se, jak deklarovat uživatelsky definovanou výjimku pomocí metody RAISE_APPLICATION_ERROR.
Co je metoda RAISE_APPLICATION_ERROR?
RAISE APPLICATION ERROR je uložená procedura, která je součástí softwaru Oracle. Pomocí tohoto postupu můžete přiřadit číslo chyby k vlastní chybové zprávě. Kombinací čísla chyby i vlastní chybové zprávy můžete sestavit chybový řetězec, který vypadá podobně jako výchozí chybové řetězce, které zobrazuje engine Oracle, když dojde k chybě.
Kolik chyb můžeme vygenerovat pomocí postupu RAISE_APPLICATION_ERROR?
Procedura RAISE_APPLICATION_ERROR nám umožňuje číslovat naše chyby od -20 000 do -20 999, takže můžeme říci, že pomocí procedury RAISE_APPLICATION_ERROR můžeme vygenerovat 1000 chyb.
Raise_application_error je součástí kterého balíčku?
Postup RAISE_APPLICATION_ERROR naleznete v balíčku DBMS_STANDARD.
Syntaxe Raise_Application_Error
raise_application_error (error_number, message [, {TRUE | FALSE}]);
Zde je číslo_chyby záporné celé číslo v rozsahu -20000.. -20999 a zpráva je řetězec znaků o délce až 2048 bajtů. V případě, že volitelný třetí parametr má hodnotu TRUE, chyba se umístí na hromadu všech předchozích chyb. V případě parametru FALSE (výchozí) však chyba nahradí všechny předchozí chyby. RAISE_APPLICATION_ERROR je součástí balíčku DBMS_STANDARD a nemusíte kvalifikovat reference na balíček STANDARD.
Příklad postupu RAISE_APPLICATION_ERROR
V následujícím příkladu vezmeme od uživatele vstup číselného datového typu a zkontrolujeme, zda je 18 nebo vyšší. Pokud tomu tak není, dojde k vyvolání chyby definované uživatelem, kterou oznámíme, jinak dojde k normálnímu průběhu provádění programu.
Krok 1:Zapněte výstup serveru
Pokud chceme vidět výsledek vrácený programem PL/SQL na výchozí výstupní obrazovce, pak budeme muset nastavit výstup serveru na ‚zapnuto‘, který je pro relaci standardně nastaven na ‚vypnuto‘.
SET SERVEROUTPUT ON;
Krok 2:Zadání uživatelského vstupu
I když můžeme hodnoty v našem kódu pevně zapojit, jak jsme to udělali v minulém tutoriálu, není to tak zábavné. Aby byl kód dynamičtější, rozhodl jsem se tentokrát přijmout zadání uživatele tím, že jsem mu umožnil zadat hodnotu do vyskakovacího pole s vytištěnou přizpůsobenou zprávou.
Můžeme zadat vstup pomocí vyskakovacího okna s vytištěnou přizpůsobenou zprávou pomocí příkazu ACCEPT v Oracle PL/SQL.
ACCEPT var_age NUMBER PROMPT 'What is your age?';
Příkaz začíná klíčovým slovem accept následovaným názvem proměnné a jejím datovým typem. V našem případě je název var_age a datový typ je NUMBER. To je první polovina prohlášení. Tato část nám pomůže při ukládání vstupní hodnoty. Druhá polovina výpisu bude zodpovědná za tisk přizpůsobené zprávy na vyskakovací okno. Pomocí klíčového slova PROMPT, které je hned za datovým typem proměnné, můžete zadat libovolný řetězec, který chcete vytisknout na vyskakovací okno. V našem případě bude tato přizpůsobená zpráva znít ‚Kolik je ti let?‘
Pokud chcete, abych udělal rozsáhlý tutoriál vysvětlující podrobně příkaz ACCEPT, sdílejte tento blog pomocí hashtagu #RebellionRider. Můžete mi také napsat na můj twitter @RebellionRider.
Krok 3:Deklarujte proměnnou
DECLARE age NUMBER := &var_age;
Kvůli omezení rozsahu nemůžeme použít hodnotu uloženou v proměnné, kterou jsme použili v příkazu accept. To znamená, že tuto hodnotu nemůžeme přímo použít do našeho programu PL/SQL. Tento problém můžeme vyřešit přiřazením hodnoty, která byla uložena do proměnné var_age, do proměnné, která je lokální pro blok PL/SQL. Přesně to jsme udělali ve výše uvedené části kódu.
Ve výše uvedeném segmentu kódu jsme deklarovali lokální proměnnou s názvem ‘age’ a pomocí operátoru přiřazení přiřadili hodnotu uloženou do proměnné var_age.
Krok 4:Deklarujte uživatelsky definovanou výjimku pomocí postupu RAISE_APPLICATION_ERROR
BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF;
Zde v tomto segmentu kódu jsme deklarovali uživatelsky definovanou výjimku pomocí procedury RAISE_APPLICATION_ERROR. Tato procedura se volá pomocí dvou parametrů. Ve kterém prvním parametru je záporné číslo, což je v mém případě -20008 a druhé číslo je řetězec, který se zobrazí, pokud dojde ke stejné chybě.
Nyní je otázkou, kdy k této chybě dojde?
Jak vidíte, kód je uzavřen uvnitř bloku podmíněného ovládání IF-THEN, který zajišťuje, že chyba bude vyvolána pouze v případě, že věk uživatele je nižší než 18 let.
Krok 5:Spustitelný příkaz
DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');
Spustitelné příkazy jsou ty, které se zkompilují a spustí, když nedojde k žádné chybě a program má normální průběh provádění. Aby byl kód jednoduchý a srozumitelný, napsal jsem jediný příkaz, kterým je příkaz DBMS OUTPUT.
Krok 6:Napište obslužnou rutinu výjimky
Nyní, když jsme deklarovali a také vyvolali uživatelsky definovanou výjimku, musíme pro ni napsat obsluhu výjimky. Jak bylo řečeno v předchozím tutoriálu PL/SQL, v sekci Exception Handler specifikujeme, co se stane, když se spustí chyba, kterou jste vyvolali.
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; /
V této části zpracování výjimek jsem zavolal funkci SQLERRM pomocí příkazu DBMS OUTPUT. Toto je pomocná funkce poskytovaná společností Oracle, která načte chybovou zprávu pro poslední výjimku.
Pojďme zkompilovat všechny tyto malé kousky kódu do jednoho velkého programu.
User-definujte výjimku pomocí postupu Raise_Application_Error
SET SERVEROUTPUT ON; ACCEPT var_age NUMBER PROMPT 'What is yor age'; DECLARE age NUMBER := &var_age; BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF; DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM); END; /
Toto je krátký, ale popisný návod, jak deklarovat uživatelsky definovanou výjimku pomocí procedury Raise_Application_Error v databázi Oracle. Doufám, že jste se dozvěděli něco nového a užili jste si čtení. Sdílením tohoto blogu na svých sociálních sítích můžete pomáhat ostatním v učení stejně jako mně a mému kanálu v růstu. Děkuji a přeji hezký den!