Научите како се рукује изузецима у ПЛ / СКЛ-у



Овај чланак је свеобухватан водич о томе како извршити руковање изузецима у ПЛ / СКЛ расправом о различитим врстама изузетака понуђених у ПЛ / СКЛ.

Ако сте програмер, можда вам је познат концепт руковања изузецима који је његов саставни део . Како су грешке неизбежне и чак и најпаметнији од нас могу да праве грешке током писања кода, морамо бити упознати са тим како се њима бавити. У овом чланку ћемо посебно учити о руковању изузецима у ПЛ / СКЛ-у.

Руковање изузецима за СКЛ у ПЛ / СКЛ-ЕдурекаИспод су теме обухваћене овим чланком:





Шта је изузетак?

Свако ненормално стање или догађај који прекида нормалан ток наших програмских упутстава током извођења или једноставним речима изузетак је грешка.

Синтакса руковања изузецима у ПЛ / СКЛ

ПРОГЛАШИТЕ ПОЧЕТАК ЕКСЦЕПТИОН ВХЕН изузетак1 ТХЕН изузетак1-обрада-изјаве КАДА изузетак2 ЗАТИМ изузетак2-руковање-изјаве КАДА изузетак3 ЗАТИМ изузетак3-руковање-изјаве ........ КАДА остали ТХЕН изузетак-руковање-изјаве КРАЈ

Овде можемо навести онолико изузетака колико желимо да решимо. Подразумевани изузетак обрађиваће се помоћу „ВХЕН отхерс ТХЕН“



Пример руковања изузецима у ПЛ / СКЛ

Програм у наставку приказује име и адресу ученика чији је ИД дат. С обзиром да у нашој бази података нема ученика са ИД вредношћу 8, програм покреће изузетак током извођења НО_ДАТА_ФОУНД, који је забележен у блоку ЕКСЦЕПТИОН.

ПРОГЛАШИТЕ с_ид студентС.ид% типе: = 8 с_наме студентС.Наме% типе с_лоц студентС.лоц% типе БЕГИН СЕЛЕЦТ наме, лоатион ИНТО с_наме, с_лоц ФРОМ студентс ВХЕРЕ ид = с_ид ДБМС_ОУТПУТ.ПУТ_ЛИНЕ ('Наме:' || с_наме) ДБМС_ОУТПУТ .ПУТ_ЛИНЕ ('Локација:' || с_лоц) ОСИМ КАДА када но_дата_фоунд ТХЕН дбмс_оутпут.пут_лине ('Нема таквог ученика!') КАДА остали ТХЕН дбмс_оутпут.пут_лине ('Упс, грешка!') ЕНД

Оутпут

Нема таквог ученика! ПЛ / СКЛ процедура је успешно завршена.

Овде можемо навести онолико изузетака колико желимо да решимо. Подразумевани изузетак обрађиваће се помоћу „ КАДА други ОНДА '

Врсте изузетака у ПЛ / СКЛ

  • Систем дефинисан
  • Корисник пркоси

Следеће у овом чланку о руковању изузецима у ПЛ / СКЛ , разговарајмо детаљно о ​​обе ове врсте.



Систем дефинисан

Ови изузеци су дефинисани и одржавани од стране Орацле сервера имплицитно и углавном су дефинисани у Орацле стандардном пакету. Кад год се унутар програма догоди изузетак, Орацле сервер се подудара и идентификује одговарајући изузетак из доступног скупа изузетака доступних у орацле стандардном пакету. У основи, ови изузеци су унапред дефинисани у ПЛ / СКЛ који се подиже КАДА се крши одређено правило базе података .

Тхе Изузеци дефинисани системом се даље деле у две категорије:

  • Именовани системски изузеци
  • Неименовани системски изузеци

Именовани системски изузеци

Именовани ПЛ / СКЛ изузеци су именован у стандардном пакету ПЛ / СКЛ , стога програмер не треба да дефинише ПЛ / СКЛ изузетке у свом коду. ПЛ / СКЛ пружа мноштво унапред дефинисаних именованих изузетака, који се извршавају када програм прекрши било које правило базе података. Следећа табела наводи неколико важних унапред дефинисаних изузетака и минуса

Изузетак Орацле грешка СКЛЦОДЕ Опис
АЦЦЕСС_ИНТО_НУЛЛ06530-6530Повећава се када се нулом објекту аутоматски додели вредност.
ЦАСЕ_НОТ_ФОУНД06592-6592Повисује се када ниједан од избора у клаузули ВХЕН а Изјава ЦАСЕ је изабрано и не постоји клаузула ЕЛСЕ.
ЦОЛЛЕЦТИОН_ИС_НУЛЛ06531-6531Повећава се када програм покуша да примени методе прикупљања које нису ПОСТОЈИ на неиницијализовану угнежђену табелу или низ или програм покушава да додели вредности елементима неиницијализоване угнежђене табеле или низа.
ДУП_ВАЛ_ОН_ИНДЕКС00001-једанПовећава се када се покушају дуплиране вредности сачувати у колони са јединственим индексом.
ИНВАЛИД_ЦУРСОР01001-1001Повисује се када се покушају извршити недозвољене операције курсора, као што је затварање неотвореног курсора.
НЕВАЖЕЋИ БРОЈ01722-1722Повисује се када конверзија низа знакова у број не успе јер низ не представља важећи број.
ЛОГИН_ДЕНИЕД01017-1017Повећава се када програм покуша да се пријави у базу података са неважећим корисничким именом или лозинком.
НИЈЕ ПРОНАЂЕН НИЈЕДАН ПОДАЦИ01403+100Повисује се када израз СЕЛЕЦТ ИНТО не врати редове.
НОТ_ЛОГГЕД_ОН01012-1012Повисује се када се упути позив базе података без повезивања са базом података.
ПРОГРАМ_ЕРРОР06501-6501Појављује се када ПЛ / СКЛ има унутрашњи проблем.
РОВТИПЕ_МИСМАТЦХ06504-6504Повисује се када курсор преузме вредност у променљивој која има некомпатибилан тип података.
СЕЛФ_ИС_НУЛЛ30625-30625Повисује се када се позове метода члана, али инстанца типа објекта није иницијализована.
СТОРАГЕ_ЕРРОР06500-6500Повећава се када ПЛ / СКЛ остане без меморије или ако је меморија оштећена.
ТОО_МАНИ_РОВС01422-1422Повисује се када израз СЕЛЕЦТ ИНТО врати више од једног реда.
ВАЛУЕ_ЕРРОР06502-6502Повећава се када се догоди грешка у аритметичким променама, конверзијама, скраћивањима или ограничењима величине.
ЗЕРО_ДИВИДЕ014761476Подиже се када се покуша поделити број са нулом.

Пример

ЦРЕАТЕ ОР РЕПЛАЦЕ ПРОЦЕДУРЕ адд_нев_студент (студент _ид_ин броја, студент _наме_ин ИН ВАРЦХАР2) ИС БЕГИН ИНСЕРТ ИНТО студент (студент _ид, студент _Наме) ВАЛУЕС (студент _ид_ин, студент _наме_ин) изузетак кад ДУП_ВАЛ_ОН_ИНДЕКС ТХЕН раисе_апплицатион_еррор (-20001, 'Дуплирај студент _ид' ) КАДА ОСТАЛО ОНДА подиже грешку_апликације (-20002, 'Догодила се грешка.') ЕНД

Настављајући даље у овом чланку о руковању изузецима у ПЛ / СКЛ-у, схватимо шта су неименовани изузеци система.

Неименовани системски изузеци

Изузеци система за које Орацле нема име познати су као неименовани изузеци система. Ови изузеци се не јављају често и пишу се са кодом и придруженом поруком.

У основи постоје два начина за руковање неименованим системским изузецима:

1. Коришћење руковаоца изузетком ВХЕН ОТХЕРС

шта у Ц ++-у значи простор имена

2. Придруживање кода изузетка имену и његово коришћење као именовани изузетак.

Следе неки кораци за неименоване системске изузетке:

  • Подигните их имплицитно.
  • У случају да се тада не поступа у „КАДА други“, њима се мора руковати изричито.
  • Да би се изузетак бавио изузећем, они се могу декларисати помоћу Прагме ЕКСЦЕПТИОН_ИНИТ и руковати позивањем на корисничко дефинисано име изузетака у одељку за изузеће.

Пример руковања неименованим изузецима помоћу Прагме ЕКСЦЕПТИОН_ИНИТ дат је касније у чланку. Настављајући даље у овом чланку о руковању изузецима у ПЛ / СКЛ-у, схватимо кориснички дефинисане изузетке.

Кориснички дефинисано

Као и сви други програмски језици, Орацле вам такође омогућава да оглас извести као сопствене изузетке. За разлику од системски дефинисаних изузетака, ови изузеци су експлицитно постављени у ПЛ / СКЛ блоку.

Кораци за декларисање кориснички дефинисаних изузетака у Орацле бази података

Кориснички дефинисане изузетке у Орацле бази података можемо дефинисати на следећа 3 начина:

  • Коришћење променљиве типа ЕКСЦЕПТИОН

Овде можемо прогласити кориснички дефинисан изузетак декларирањем променљиве ЕКСЦЕПТИОН тип података у нашем коду и експлицитно га подигните у нашем програму користећи РАИСЕ изјаву.

  • Коришћење функције ПРАГМА ЕКСЦЕПТИОН_ИНИТ

Непредефинисани број грешке можемо дефинисати променљивом типа података ЕКСЦЕПТИОН

  • Користећи методу РАИСЕ_АППЛИЦАТИОН_ЕРРОР

Коришћењем ове методе можемо прогласити кориснички дефинисан изузетак помоћу сопственог прилагођеног броја грешке и поруке.

До сада сте можда имали грубу идеју о начинима на које можемо подићи кориснички дефинисане изузетке у ПЛ / СКЛ. О свакој од горе поменутих метода сазнаћемо са примерима даље у овом чланку о руковању изузецима у ПЛ / СКЛ.

Следеће у овом чланку, наставимо са демонстрацијама кориснички дефинисаног руковања изузецима.

Демонстрација кориснички дефинисаних изузетака

Настављајући даље у овом чланку о руковању изузецима у ПЛ / СКЛ-у, схватимо како се користи променљива типа ЕКСЦЕПТИОН.

Коришћење променљиве типа ЕКСЦЕПТИОН

Процес пријављивања корисничког дефинисаног изузетка подељен је у три дела и ова 3 дела су:

  • Прогласите тип података о изузећу променљиве
  • Подигните изузетак
  • Обрадите изузетак

Напишимо код да бисмо детаљно демонстрирали горње кораке.

ПРОГЛАШИТЕ вар_дивидендни БРОЈ: = 10 вар_дивисор НУМБЕР: = 0 вар_ресулт НУМБЕР ек-ДивЗеро ЕКСЦЕПТИОН

У горњем блоку декларације имамо четири променљиве, међу којима су прве три променљиве типа нормалног броја података, а четврта која је ек_ДивЗеро је посебна променљива типа података о изузетку. Четврти је наш кориснички дефинисани изузетак.

ПРОГЛАШИТЕ вар_дивидендни БРОЈ: = 10 вар_дивисор НУМБЕР: = 0 вар_ресулт НУМБЕР ек-ДивЗеро ЕКСЦЕПТИОН

Горњи део извршења овог анонимног блока, ступиће у акцију само када је делилац 0. Ако је делилац нула, као што је то у нашем случају, грешка ће се подићи и контрола програма ће прескочити све наредне кораке и тражиће одговарајући руковатељ изузецима. У случају да пронађе било коју другу, извршиће радњу у складу с тим, у супротном ће или прекинути програм или ће нас затражити са необрађеном системски дефинисаном грешком.

ИЗУЗЕТАК КАДА ек_ДивЗеро ТХЕН ДБМС_ОУТПУТ.ПУТ_ЛИНЕ („ГРЕШКА, делитељ не може бити нула“)

Ово је руковалац изузецима. Чим корисник унесе делилац као 0, затражит ће се горњи низ порука.

Коначни код:

ПРОГЛАШИ вар_дивиденд БРОЈ: = 10 вар_дивизор БРОЈ: = 0 вар_ресулт БРОЈ ек-ДивЗеро ИЗУЗЕТАК ПОЧИНИ АКО вар_дивисор = 0 ОНДА ПОВЕЋИ ек-ДивЗеро КРАЈ ИФ вар_ресулт: = вар_дивиденд / вар_дивисор ДБМС_ОУТПУТ.ПУТ_ЛИНЕ ('РЕСулт вар_ПРЕ_ФИЛТ') РЕСЕТ ИФ = = 0 ТХЕН РАИСЕ ек-ДивЗеро ЕНД ИФ Вар_ресулт: = вар_дивиденд / вар_дивисор ДБМС_ОУТПУТ.ПУТ_ЛИНЕ ('Резултат =' || вар_ресулт) ЕНД

Настављајући даље у овом чланку о руковању изузецима у ПЛ / СКЛ-у, схватимо како се користи метода ПРАГМА_ЕКСЦЕПТИОН_ИНИТ.

ц ++ помоћу простора имена

Коришћење функције ПРАГМА ЕКСЦЕПТИОН_ИНИТ

У ПРАГМА ЕКСЦЕПТИОН_ИНИТ функција, име изузетка је повезано са бројем грешке Орацле-а. Ово име се може користити у дизајнирању обрађивача изузетака за грешку.За велике пројекте са много корисничких грешака, ПРАГМА ЕКСЦЕПТИОН_ИНИТ је најкориснија и најприкладнија метода.

Синтакса:

ПРАГМА ЕКСЦЕПТИОН_ИНИТ (име_изузетака, -Орацле_еррор_нумбер)

Пример

ПРОГЛАШИ деадлоцк_детецтед ИЗУЗЕТАК ПРАГМА ЕКСЦЕПТИОН_ИНИТ (деадлоцк_детецтед, -60) ПОЧИНИ НУЛЛ - Нека операција која узрокује грешку ОРА-00060 ИЗУЗЕТАК КАДА деадлоцк_детецтед ТХЕН НУЛЛ - обради грешку ЕНД

ПРАГМА ЕКСЦЕПТИОН_ИНИТ говори компајлеру да име изузетка повеже са бројем Орацле грешке као што је раније поменуто. Омогућава вам да се по имену позовете на било који интерни изузетак и за њега напишете одређени руковатељ. Када видите стог грешака или низ порука о грешкама, онај на врху је онај који се може заробити и њиме се рукује.

Настављајући даље у овом чланку о руковању изузецима у ПЛ / СКЛ-у, схватимо како се користи метода РАИСЕ_АППЛИЦАТИОН_ЕРРОР.

Користећи методу РАИСЕ_АППЛИЦАТИОН_ЕРРОР

То је поступак који се уграђује са софтвером орацле. Коришћењем овог поступка можемо повезати број грешке са прилагођеном поруком о грешци. Комбинујући и број грешке и прилагођену поруку о грешци, може се саставити низ грешака који изгледа слично оним подразумеваним низовима грешака које Орацле приказује када наиђе на грешку. Процедура РАИСЕ_АППЛИЦАТИОН_ЕРРОР се налази унутар ДБМС_СТАНДАРД пакета

Синтакса

еррор_апплицатион_еррор (еррор_нумбер, мессаге [, ТРУЕ])

Пример

/ * Креиран је окидач трг_емп_детаил_цхк. * / СТВОРИ ИЛИ ЗАМЕНИ ТРИГГЕР трг_емп_детаил_цхк / * Време окидача је декларисано као БЕФОРЕ УПДАТЕ у табели ЗАПОСЛЕНИХ. * / Бефоре УПДАТЕ ОН запосленици ПРОГЛАШАЈУ дозволу_одбијено ЕКСЦЕПТИОН БЕГИН / * Старт оф тхе ИФ БЕГИН / дан системског времена је или субота или недеља или не. * / АКО трим (ТО_ЦХАР (сисдате, 'Даи')) ИН ('Сатурдаи', 'Сундаи') ТХЕН рисе_апплицатион_еррор (-20000, 'Нисте овлашћени за то било каква измена током викенда !! ') / * Поступак рисе_апплицатион_еррор се позива са првом вредношћу параметра као -20000, а са другим параметром са подразумеваним текстом који наводи да корисник није овлашћен да врши било какве измене викендом. * / ЕНД ИФ ЕНД

Овим смо дошли до краја овог чланка о „Руковању изузецима у ПЛ / СКЛ-у“. Надам се да се ова тема добро разуме и да вам је помогла. Покушајте да напишете сопствене кодове и укључите методе објашњене у овом чланку.

Ако желите да се обучите од професионалаца за ову технологију, можете се одлучити за структурирану обуку од едуреке! Погледајте ово Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250 000 задовољних ученика раширених широм света. Овај курс вас обучава за основне концепте и напредне алате и технике за управљање подацима и администрирање МиСКЛ базе података. Укључује практично учење о концептима као што су МиСКЛ Воркбенцх, МиСКЛ Сервер, моделирање података, МиСКЛ конектор, дизајн базе података, МиСКЛ командна линија, МиСКЛ функције итд. На крају тренинга моћи ћете да креирате и администрирате сопствену МиСКЛ базу података и управљате подаци.

Имате питање за нас? Молимо вас да га помињете у одељку за коментаре овог чланка „Руковање изузецима у ПЛ / СКЛ“ и јавићемо вам се што је пре могуће.