complete guide pl sql exception handling with examples
Овај водич објашњава ПЛ СКЛ руковање изузецима и сродне концепте као што су типови изузетака, кориснички дефинисани и системски дефинисани изузеци, како подићи изузетак итд.:
У ПЛ / СКЛ датумски формат од ПЛ / СКЛ серија , сазнали смо о неким корисним функцијама око Датетиме-а, Тиместамп-а и Интервала
У овом чланку ћемо разговарати о руковању изузецима у ПЛ СКЛ-у. Такође ћемо истражити предности изузетака и како их повећати.
Почнимо са учењима !!
Шта ћете научити:
ПЛ СКЛ руковање изузецима
Грешка или догађај упозорења назива се изузетак. Наилази на то током извођења програма ПЛ / СКЛ током извођења. ПЛ / СКЛ има механизме за руковање овим изузетним условима уз помоћ блока ЕКСЦЕПТИОН кода где је дефинисано како се супротставити услову грешке.
Постоје две врсте изузетака. Они су наведени у наставку:
- Кориснички дефинисани изузеци.
- Изузеци дефинисани системом.
Неки од популарних изузетака дефинисаних системом су без меморије и подела са нулом, има имена попут СТОРАГЕ_ЕРРОР и ЗЕРО_ДИВИДЕ. Кориснички дефинисани изузеци декларисани су у пакету, потпрограму или унутар одељка декларације ПЛ / СКЛ блока кода и требало би им доделити имена.
Једном када се догоди изузетак, природни ток извршења се зауставља, а затим извршење показује на одељак за изузеће ПЛ / СКЛ кода. Иако се системски дефинисани изузеци подразумевано бацају, кориснички дефинисане мора изричито избацити кључна реч РАИСЕ.
Стога руковање изузецима помаже у решавању грешака које се нађу током извршавања, а не током компајлирања програма.
Предности руковања изузецима
Предности су наведене у наставку:
- Ако наш код нема обраду изузетака, сваки пут када извршимо наредбу, морамо потврдити грешке у извршавању.
- Ако избегнемо руковање изузецима у нашем коду, стварне грешке се пропуштају што доводи до неких других грешака.
- Обрада изузетака омогућава прескакање вишеструких верификација у коду.
- Пружа бољу читљивост кода изоловањем руковалаца грешкама у коду.
Синтакса руковања изузецима:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Подразумевани изузетак се врши помоћу КАДА други ОНДА.
Размотримо таблицу која је именована ГРАЂАНИН .
SELECT * FROM CITIZEN;
Створили смо табелу ЦИТИЗЕН уз помоћ СКЛ наредбе дане у наставку.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
У ову вредност убаците вредности са доле датим СКЛ изразима:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Имплементација кодирања са руковањем изузецима:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
Излаз горњег кода:
У горњем коду, будући да у табели ЦИТИЗЕН нема грађана који имају 9 година, подигнут је изузетак током извођења.
Повећајте изузетак у ПЛ / СКЛ
Програмери могу изричито да направе изузетак уз помоћ кључне речи РАИСЕ.
Синтакса за подизање изузетака:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Овде је изнимка_н назив изузетка који покрећемо. На овај начин можемо створити и дефинисане од стране корисника и од система дефинисане изузетке.
Кориснички дефинисани изузетак
Програмери могу да направе сопствене изузетке и користе их за руковање грешкама. Могу се креирати у декларационом делу потпрограма и може им се приступити само унутар тог потпрограма.
Изузетак који се креира на нивоу пакета може се користити кад год се приступи пакету. Кориснички дефинисан изузетак може се покренути коришћењем кључне речи РАИСЕ.
Синтакса за кориснички дефинисану грешку је:
тестирати генерисање података у софтверском тестирању
DECLARE exception_n EXCEPTION;
Ево, изузетак_н је назив изузетка који подижемо. Стога можемо изјавити изузетак давањем имена иза којег следи кључна реч ЕКСЦЕПТИОН. Изузетак се може декларисати на сличан начин као што се декларишу променљиве. Међутим, изузетак је неочекивано стање, а не ставка података.
Обим изузетака у ПЛ / СКЛ:
Правила опсега за изузеће ПЛ / СКЛ наведена су у наставку:
- Изузетак се не може пријавити више пута у истом блоку кода. Али исти изузетак можемо прогласити у два различита блока кода.
- Изузетак декларисан у блоку кода је локални унутар тог блока и глобални за сваки подблок.
- Ако поново декларишемо глобални изузетак унутар подблока, локална декларација поништава.
Размотримо поново табелу која носи назив ГРАЂАНИН.
Имплементација кода са изузецима које дефинише корисник:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
Излаз горњег кода:
Унапред дефинисани изузетак
Кршећи правила базе података или прелазећи системски зависан праг, интерни изузетак се аутоматски активира. Све ове грешке имају јединствени број и сваки изузетак је дефинисан као име. На пример, ПЛ / СКЛ баца унапред дефинисани изузетак НО_ДАТА_ФОУНД када упит СЕЛЕЦТ не дохваћа редове.
Сви унапред дефинисани изузеци ПЛ / СКЛ декларисани су у СТАНДАРД пакету који се бави ПЛ / СКЛ окружењем.
Изузетак | Орацле грешка | СКЛ КОД | Опис |
---|---|---|---|
НЕВАЖЕЋИ БРОЈ | ВРЕМЕ - 01722 | -1722 | Овај изузетак се покреће ако конверзија у низ знакова у број не прође јер низ представља неважећи број. |
АЦЦЕСС_ИНТО_НУЛЛ | САДА - 06530 | -6530 | Овај изузетак се покреће ако је нулу објекту природно додељена вредност. |
ЦАСЕ_НОТ_ФОУНД | САДА - 06592 | -6592 | Овај изузетак се покреће ако није изабрана ниједна опција у клаузули ВХЕН и ако не постоји клаузула ЕЛСЕ. |
ЦОЛЛЕЦТИОН_ИС_НУЛЛ | САДА - 06531 | -6531 | Овај изузетак се покреће када код покушава да примени методе прикупљања, осим ПОСТОЈИ на угнежђену табелу или низ који није иницијализован. Такође се може подићи ако наш код покуша да додели вредности угнежђеној табели или низу који није иницијализован. |
ДУП_ВАЛ_ОН_ИНДЕКС | ВРЕМЕ - 00001 | -1 | Овај изузетак се покреће ако се покушају дуплиране вредности сачувати у колони која је ограничена јединственим индексом. |
ЦУРСОР_АЛРЕАДИ_ОПЕН | САДА - 06511 | -6511 | Овај изузетак је покренут ако наш код покушава да отвори већ отворени курсор. |
ИНВАЛИД_ЦУРСОР | ВРЕМЕ - 01001 | -1001 | Овај изузетак је подигнут ако покушамо да извршимо неке операције над курсорима које нису дозвољене. На пример, покушај затварања већ затвореног курсора. |
ЛОГИН_ДЕНИЕД | ВРЕМЕ - 01017 | -1017 | Овај изузетак је покренут ако је програм покушао да се пријави у базу података са неправилним корисничким именом и лозинком. |
НИЈЕ ПРОНАЂЕН НИЈЕДАН ПОДАЦИ | ВРЕМЕ - 01403 | 100 | Овај изузетак се покреће ако упит СЕЛЕЦТ не дохвати ниједан ред. |
НОТ_ЛОГГЕД_ОН | ВРЕМЕ - 01012 | -1012 | Овај изузетак се покреће ако покушавамо да извршимо операцију базе података без повезивања са њом. |
ПРОГРАМ_ЕРРОР | ВРЕМЕ - 06501 | -6501 | Овај изузетак је покренут ако је програм ПЛ / СКЛ наишао на унутрашњу грешку. |
РОВТИПЕ_МИСМАТЦХ | ВРЕМЕ - 06504 | -6504 | Овај изузетак се покреће ако курсор покушава да врати вредности променљивој са некомпатибилним типом података. |
СЕЛФ_ИС_НУЛЛ | САДА - 30625 | -30625 | Овај изузетак се покреће ако се позове метода члана без иницијализације његовог типа објекта. |
СТОРАГЕ_ЕРРОР | САДА - 06500 | -6500 | Овај изузетак је покренут ако ПЛ / СКЛ програму понестане меморије или му је меморија оштећена током извршавања. |
ТОО_МАНИ_РОВС | ВРЕМЕ - 01422 | -1422 | Овај изузетак се покреће ако упит СЕЛЕЦТ преузме више редова. |
СУБСЦРИПТ_БЕИОНД_ЦОУНТ | САДА - 06533 | -6533 | Овај изузетак се покреће ако је индекс већи од укупног броја елемената у збирци. |
СУБСЦРИПТ_ОУТСИДЕ_ЛИМИТ | САДА - 06532 | -6532 | Овај изузетак се подиже ако је индекс већи од опсега прага. |
СИС_ИНВАЛИД_РОВИД | ОРА-01410 | -1410 | Овај изузетак се покреће ако конверзија у низ знакова у универзални ИД реда не пролази јер низ знакова представља неважећи ИД реда. |
ТИМЕОУТ_ОН_РЕСОУРЦЕ | ОРА-00051 | -51 | Овај изузетак је покренут ако Орацле чека ресурс. |
ВАЛУЕ_ЕРРОР | ОРА-06502 | -6502 | Овај изузетак се покреће ако се у нашем програму догоди математичка грешка, конверзија или скраћивање. |
ЗЕРО_ДИВИДЕ | ОРА-01476 | -1476 | Овај изузетак се подиже ако покушавамо да број поделимо са 0. |
Често постављана питања и одговори
П # 1) Шта је унапред дефинисани изузетак у ПЛ / СКЛ-у?
Одговор: ПЛ / СКЛ аутоматски уклања унапред дефинисани изузетак ако програм крши правила базе података.
П # 2) Шта је ПЛ / СКЛ руковање изузецима и зашто је потребно?
Одговор: Грешка или неочекивани догађај у програму назива се изузетак. Зауставља нормалан ток извршавања програма. У ПЛ / СКЛ, изузетак се обрађује унутар блока ЕКСЦЕПТИОН у коду и унутар тог блока је описана одговарајућа акција против изузетка.
П # 3) Шта се подразумева под руковањем изузецима?
Одговор: То је метода одговора на неочекиване догађаје који се могу догодити током извршавања кода.
П # 4) Који су два облика руковања грешкама?
Одговор: Два облика управљања грешкама укључују грешка током компајлирања и грешка у раду . Грешка у времену извођења догађа се током извршавања програма због неправилних података или логике. Грешке током компајлирања се хватају током компајлирања нашег кода.
П # 5) Која је разлика између грешке и изузетка?
Одговор: Изузеци су инциденти који се решавају помоћу блока три / цатцх и могу се наићи како током времена компајлирања, тако и током извођења програма. С друге стране, грешке се сусрећу само у време извођења.
Закључак
У овом упутству детаљно смо разговарали о неким основним концептима ПЛ / СКЛ-а који су од суштинског значаја за управљање изузецима у нашим програмима.
Обрадили смо следеће теме наведене у наставку:
- Изузеци.
- Врсте изузетака.
- Неки унапред дефинисани изузеци.
У следећем упутству разговараћемо о ПЛ / СКЛ трансакцијама, ООПС концептима и многим другим повезаним темама.
Препоручено читање
- Водич за руковање изузецима за Ц # са примерима кода
- Јава изузеци и руковање изузецима са примерима
- ПЛ СКЛ пакет: Водич за Орацле ПЛ / СКЛ пакет са примерима
- Руковање изузецима у Ц ++
- ПЛ СКЛ лекције за почетнике са примерима | Шта је ПЛ / СКЛ
- ПЛ СКЛ евиденција Водич са примерима