V Úvodu do PL/SQL výjimek jsme se dozvěděli, že existují tři způsoby, jak deklarovat uživatelem definované výjimky v databázi Oracle. V tomto tutoriálu prozkoumáme první způsob a naučíme se, jak deklarovat uživatelsky definovanou výjimku pomocí proměnné datového typu Exception.
Deklarace uživatelem definované výjimky pomocí proměnné Exception je proces tří kroků. Tyto tři kroky jsou –
- Deklarujte proměnnou datového typu výjimky – Tato proměnná ponese veškerou zátěž na svá bedra.
- Raise the Exception – Toto je část, kde říkáte kompilátoru o podmínce, která spustí výjimku.
- Ošetřete výjimku – Toto je poslední sekce, kde specifikujete, co se stane, když se spustí chyba, kterou jste vyvolali.
V tomto tutoriálu PL/SQL vám vysvětlím každý z těchto tří kroků pomocí kódu PL/SQL.
Pro demonstrační účely napíšu kód, který v operaci dělení zkontroluje, zda je dělitel nulový nebo ne. Pokud je nula, dojde k chybě a zobrazí se uživateli, jinak se na výstupní obrazovku vrátí skutečná hodnota, která je výsledkem aritmetiky dělení.
Krok 1:Deklarujte proměnnou datového typu Exception
Proměnnou Exception mám na mysli proměnnou s datovým typem Exception. Jako každou jinou proměnnou PL/SQL můžete deklarovat proměnnou Exception v sekci deklarace anonymního i pojmenovaného bloku PL/SQL. Tato proměnná výjimky pak bude fungovat jako uživatelsky definovaná výjimka pro váš kód.
DECLARE var_dividend NUMBER := 24; var_divisor NUMBER := 0; var_result NUMBER; ex_DivZero EXCEPTION;
V této sekci deklarace máme 4 proměnné. Mezi těmito 4 proměnnými jsou první 3 normální proměnné datového typu Number a 4, která je ex_DivZero, jsou speciální proměnná datového typu EXCEPTION. Tato proměnná se stane naší uživatelsky definovanou výjimkou pro tento program.
Krok 2:Zvyšte výjimku
Dalším krokem po deklaraci proměnné Exception je vyvolání výjimky. Pro vyvolání výjimky v PL/SQL používáme příkaz Raise.
Příkaz Raise je speciální druh příkazu PL/SQL, který mění normální tok provádění kódu. Jakmile kompilátor narazí na podmínku zvýšení, přenese řízení na obsluhu výjimky.
BEGIN IF var_divisor = 0 THEN RAISE ex_DivZero; END IF;
Zde je podmínka zvýšení doprovázena podmínkou IF-THEN. Pomocí toho se můžeme vyhnout nechtěným přepnutím během řídicího toku programu. Pomocí podmínky If zajišťujeme, že tato chyba se projeví pouze tehdy, když je dělitel roven 0.
var_result := var_dividend/var_divisor; DBMS_OUTPUT.PUT_LINE('Result = ' ||var_result);
Po napsání logiky pro vyvolání chyby můžete napsat své další spustitelné příkazy kódu, stejně jako jsme to udělali zde. Po příkazu Raise provádíme aritmetiku operace dělení a ukládáme výsledek do proměnné var_result a také jej zobrazujeme zpět jako výstup pomocí příkazu DBMS OUTPUT.
Krok 3:Zpracování výjimky
To je hlavní část kódu. Zde napíšeme logiku pro naši uživatelsky definovanou výjimku a řekneme kompilátoru, co by měl udělat, pokud a kdy k chybě dojde.
EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE('Error Error - Your Divisor is Zero'); END; /
Zde máme obsluhu výjimky pro proměnnou ex_DivZero. V sekci zpracování výjimek máme příkaz DBMS OUTPUT, který se zobrazí, když uživatel definuje chybu, která je ex_DivZero.
Nyní seskupme všechny tyto kusy kódů dohromady.
Chyba dělení nulou pomocí uživatelem definované výjimky PL/SQL v databázi Oracle
SET SERVEROUTPUT ON; DECLARE var_dividend NUMBER := 24; 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 = ' ||var_result); EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE('Error Error - Your Divisor is Zero'); END; /
Před spuštěním tohoto programu se ujistěte, že máte zapnutý SERVEROUTPUT, jinak neuvidíte výsledek.
Stejně jako v kroku 1 nastavíme hodnotu dělitele na nulu, což zase zvýší uživatelem definovanou chybu ex_DivZero, protože při kompilaci výše uvedeného kódu uvidíte řetězec „Chyba chyby – váš dělitel je nula“ stejný, jaký jsme zadali v našem obslužném programu výjimek (krok 3).
Toto je výukový program PL/SQL o tom, jak deklarovat uživatelsky definovanou výjimku pomocí proměnné datového typu Exception. Doufám, že se vám líbilo a dozvěděli jste se něco nového. Pokud ano, sdílejte tento blog na svých sociálních sítích a pomozte ostatním v učení spolu se mnou a mým kanálem. Děkuji a přeji hezký den!