Както беше обсъдено във въведението в обработката на изключения PL/SQL, има три начина за деклариране на изключения, дефинирани от потребителя в Oracle PL/SQL. Сред тези три вече обсъдихме и научихме първия начин в предишния урок. Днес в този блог ще направим крачка напред и ще видим втория начин за деклариране на изключение, дефинирано от потребителя, и ще научим как да декларирате изключение, дефинирано от потребител, с помощта на метода RAISE_APPLICATION_ERROR.
Какво е методът RAISE_APPLICATION_ERROR?
ИЗВЕЖДАНЕ НА ГРЕШКАТА НА ПРИЛОЖЕНИЕТО е съхранена процедура, която е вградена със софтуера на Oracle. С помощта на тази процедура можете да свържете номер на грешка с персонализираното съобщение за грешка. Комбинирайки както номера на грешката, така и персонализираното съобщение за грешка, можете да съставите низ за грешка, който изглежда подобен на онези низове за грешки по подразбиране, които се показват от двигателя на Oracle, когато възникне грешка.
Колко грешки можем да генерираме чрез процедурата RAISE_APPLICATION_ERROR?
Процедурата RAISE_APPLICATION_ERROR ни позволява да номерираме нашите грешки от -20 000 до -20 999, като по този начин можем да кажем, че използвайки процедурата RAISE_APPLICATION_ERROR, можем да генерираме 1000 грешки.
Raise_application_error е част от кой пакет?
Можете да намерите процедура RAISE_APPLICATION_ERROR в пакета DBMS_STANDARD.
Синтаксис на Raise_Application_Error
raise_application_error (error_number, message [, {TRUE | FALSE}]);
Тук error_number е отрицателно цяло число в диапазона от -20000.. -20999 и съобщението е символен низ с дължина до 2048 байта. В случай, че незадължителният трети параметър е ВЯРНО, грешката се поставя върху купчината с всички предишни грешки. В случай обаче на параметър FALSE (по подразбиране), грешката замества всички предишни грешки. RAISE_APPLICATION_ERROR е част от пакет DBMS_STANDARD и не е необходимо да квалифицирате препратки към пакет STANDARD.
Пример за процедура RAISE_APPLICATION_ERROR
В следващия пример ще вземем въвеждане на числов тип данни от потребителя и ще проверим дали е 18 или повече. Ако не е, тогава грешката, дефинирана от потребителя, която ще декларираме, ще бъде повдигната, в противен случай ще има нормален поток на изпълнение на програмата.
Стъпка 1:Включете изхода на сървъра
Ако искаме да видим резултата, върнат от програмата PL/SQL на изходния екран по подразбиране, тогава ще трябва да настроим изхода на сървъра „включен“, който по подразбиране е зададен на „изключен“ за сесията.
SET SERVEROUTPUT ON;
Стъпка 2:Вземете информация от потребителя
Въпреки че можем да свързваме стойностите в нашия код, както направихме в последния урок, но не е толкова забавно. За да направя кода по-динамичен, реших този път да приема въведеното от потребителя, като им позволих да въведат стойността в изскачащо поле с персонализирано съобщение, отпечатано върху него.
Можем да вземем входа с помощта на изскачащ прозорец с персонализирано съобщение, отпечатано върху него, като използваме команда ACCEPT в Oracle PL/SQL.
ACCEPT var_age NUMBER PROMPT 'What is your age?';
Командата започва с ключовата дума accept, последвана от името на променливата и нейния тип данни. В нашия случай името е var_age, а типът на данните е NUMBER. Това е първата половина на изявлението. Тази част ще ни помогне да съхраняваме входната стойност. Другата половина на изявлението ще отговаря за отпечатването на персонализираното съобщение в изскачащото поле. Използвайки ключовата дума PROMPT, която е непосредствено след типа данни на променливата, можете да посочите всеки желан низ, който искате да бъде отпечатан във вашето изскачащо поле. В нашия случай това персонализирано съобщение ще бъде „На каква възраст сте?“
Ако искате да направя обширен урок, обясняващ подробно командата ACCEPT, тогава споделете този блог, като използвате хештага #RebellionRider. Можете също да ми пишете в моя Twitter @RebellionRider.
Стъпка 3:Деклариране на променлива
DECLARE age NUMBER := &var_age;
Поради ограничението на обхвата не можем да използваме стойността, съхранена в променливата, която използвахме в командата accept. Това означава, че не можем директно да използваме тази стойност в нашата PL/SQL програма. Можем да решим този проблем, като присвоим стойността, която е била съхранена в променливата var_age, на променлива, която е локална за PL/SQL блока. Точно това направихме в горния сегмент от кода.
В горния кодов сегмент ние декларирахме локална променлива с име „age“ и присвоихме стойността, съхранена в променливата var_age, използвайки оператора за присвояване.
Стъпка 4:Декларирайте дефинираното от потребител изключение, като използвате процедурата RAISE_APPLICATION_ERROR
BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF;
Тук, в този кодов сегмент, ние декларирахме дефинираното от потребител изключение, използвайки процедурата RAISE_APPLICATION_ERROR. Тази процедура се извиква с помощта на два параметъра. В кой първи параметър е отрицателното число, което в моя случай е -20008, а второто число е низ, който се показва, ако възникне същата грешка.
Сега въпросът е кога ще възникне тази грешка?
Както можете да видите, кодът е затворен в условен контролен блок IF-THEN, който гарантира, че грешката ще бъде повдигната само ако възрастта на потребителя е по-малка от 18 години.
Стъпка 5:Изпълним оператор
DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');
Изпълними оператори са тези, които се компилират и изпълняват, когато няма грешка и програмата има нормален поток на изпълнение. За да направя кода прост и лесен за разбиране, току-що написах едно изявление, което е СУБД OUTPUT оператор.
Стъпка 6:Напишете манипулатора на изключения
След като декларирахме и издигнахме дефинираното от потребител изключение, трябва да напишем манипулатора на изключение за него. Както беше казано в предишния урок за PL/SQL, в секцията за обработка на изключения указваме какво ще се случи, когато се задейства грешката, която сте повдигнали.
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; /
В този раздел за обработка на изключения извиках функция на SQLERRM, използвайки DBMS OUTPUT оператор. Това е помощна функция, предоставена от Oracle, която извлича съобщението за грешка за последното настъпило изключение.
Нека компилираме всички тези малки парчета код в една голяма програма.
Изключение, дефинирано от потребителя с помощта на процедура 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; /
Това е кратък, но описателен урок за това как да декларирате изключение, дефинирано от потребителя, като използвате процедурата Raise_Application_Error в Oracle Database. Надяваме се, че сте научили нещо ново и сте се насладили на четене. Можете да помогнете на другите в ученето, както и да помогнете на мен и моя канал в израстването, като споделите този блог във вашите социални медии. Благодаря и приятен ден!