Във въведението в PL/SQL изключенията научихме, че има три начина за деклариране на изключения, дефинирани от потребителя в Oracle Database. В този урок ще проучим първия начин и ще научим как да декларираме изключение, дефинирано от потребителя, като използваме променлива с тип данни Exception.
Декларирането на дефинирано от потребител изключение с помощта на променлива Exception е процес в три стъпки. Тези три стъпки са –
- Декларирайте променлива с тип данни за изключение – Тази променлива ще поеме цялата тежест на плещите си.
- Повишете изключението – Това е частта, в която казвате на компилатора за условието, което ще задейства изключението.
- Обработка на изключението – Това е последният раздел, в който указвате какво ще се случи, когато се задейства грешката, която сте повдигнали.
В този урок за PL/SQL ще ви обясня всяка от тези три стъпки с помощта на PL/SQL код.
За демонстрационна цел ще напиша код, който ще провери дали делителят е нула или не в операцията на разделяне. Ако е нула, ще възникне грешка и ще бъде показана на потребителя, в противен случай на изходния екран ще бъде върната действителна стойност, която е резултат от аритметиката на деленето.
Стъпка 1:Декларирайте променлива с тип данни Exception
Под променлива Exception имам предвид променлива с тип данни Exception. Както всяка друга променлива PL/SQL, можете да декларирате променлива Exception в секцията за декларация на анонимния, както и наименуван PL/SQL блок. Тази променлива за изключение ще работи като дефинирано от потребителя изключение за вашия код.
DECLARE var_dividend NUMBER := 24; var_divisor NUMBER := 0; var_result NUMBER; ex_DivZero EXCEPTION;
В този раздел за декларации имаме 4 променливи. Сред тези 4 променливи първите 3 са променливи тип данни за нормален номер, а 4-та, която е ex_DivZero, е специалната променлива тип данни EXCEPTION. Тази променлива ще стане нашето потребителско изключение за тази програма.
Стъпка 2:Повишете изключението
Следващата стъпка след деклариране на променлива Exception е да се издигне изключението. За да повдигнем изключението в PL/SQL, използваме оператор Raise.
Операторът Raise е специален вид PL/SQL оператор, който променя нормалния поток на изпълнение на кода. Веднага щом компилаторът срещне условие за повишаване, той прехвърля контрола върху манипулатора на изключенията.
BEGIN IF var_divisor = 0 THEN RAISE ex_DivZero; END IF;
Тук условието за повишаване е придружено от условието IF-THEN. С помощта на това можем да избегнем нежелани превключвания по време на контролния поток на програмата. Използвайки условието If ние се уверяваме, че тази грешка ще влезе в действие само когато делителят е равен на 0.
var_result := var_dividend/var_divisor; DBMS_OUTPUT.PUT_LINE('Result = ' ||var_result);
След като напишете логиката за издигане на грешката, можете да напишете другите си изпълними оператори на кода, точно както направихме тук. След оператора Raise изпълняваме аритметиката на операцията за разделяне и съхраняваме резултата в променливата var_result, както и го показваме обратно като изход с помощта на оператора DBMS OUTPUT.
Стъпка 3:Обработете изключението
Това е основният раздел на кода. Тук пишем логиката за нашето потребителско изключение и казваме на компилатора какво трябва да направи, ако и кога възникне тази грешка.
EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE('Error Error - Your Divisor is Zero'); END; /
Тук имаме манипулатора на изключения за променливата ex_DivZero. В секцията за обработка на изключения имаме израз на DBMS OUTPUT, който ще се покаже, когато се появи грешка, дефинирана от нашия потребител, която е ex_DivZero.
Сега нека групираме всички тези парчета кодове заедно.
Грешка за разделяне на нула с помощта на PL/SQL User-define Exception в Oracle Database
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; /
Преди да стартирате тази програма, уверете се, че сте включили SERVEROUTPUT, в противен случай няма да можете да видите резултата.
Както в стъпка 1, ние задаваме стойността на делителя на нула, което от своя страна ще повиши грешката в дефинирането на потребителя ex_DivZero, тъй като при компилирането на горния код ще видите низа „Грешка за грешка – Вашият делител е нула“ същият, който посочихме в нашия манипулатор на изключения (стъпка 3).
Това е урокът за PL/SQL за това как да декларирате изключение, дефинирано от потребителя, като използвате променлива от тип данни Exception. Надявам се, че ви е харесало и сте научили нещо ново. Ако е така, моля, не забравяйте да споделите този блог в социалните си медии и да помогнете на другите да учат заедно с мен и моя канал. Благодаря и приятен ден!