Alamin Kung Paano Pangasiwaan ang Mga Pagbubukod Sa PL / SQL

Ang artikulong ito ay isang komprehensibong gabay sa kung paano magsagawa ng paghawak ng pagbubukod sa PL / SQL sa pamamagitan ng pagtalakay sa iba't ibang uri ng mga pagbubukod na inaalok sa PL / SQL.

Kung ikaw ay isang programmer, maaaring pamilyar ka sa konsepto ng paghawak ng pagbubukod ay isang mahalagang bahagi ng anuman . Tulad ng mga error na hindi maiiwasan at kahit na ang pinakamatalino sa atin ay maaaring magkamali habang nagsusulat ng code, dapat ay alam natin kung paano ito hawakan. Sa artikulong ito, partikular na matututunan namin ang tungkol sa paghawak ng pagbubukod sa PL / SQL.

pagpapaandar ng goto c ++

Paghawak ng SQL-Exception sa PL / SQL-EdurekaNasa ibaba ang mga paksang sakop sa artikulong ito:





Ano ang isang Exception?

Anumang abnormal na kundisyon o kaganapan na nakakagambala sa normal na daloy ng aming mga tagubilin sa programa sa oras ng pagpapatakbo o sa simpleng mga salita ang isang pagbubukod ay isang error.

Syntax ng Paghawak ng Exception sa PL / SQL

DECLARE BEGIN EXCEPTION WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statement WHEN exception3 THEN exception3-handling-statement ........ KAPAG ang iba THEN exception3-handling-statement END

Dito, maaari naming ilista ang maraming mga pagbubukod na nais naming hawakan. Pangangasiwaan ang default na pagbubukod gamit ang 'WHEN others THEN'



Halimbawa ng Pangangasiwa ng Exception sa PL / SQL

Ipinapakita ng program sa ibaba ang pangalan at address ng isang mag-aaral na ang ID ay ibinigay. Dahil walang mag-aaral na may halaga na ID ng 8 sa aming database, itataas ng programa ang eksepsiyon sa run-time na NO_DATA_FOUND, na nakunan sa EXCEPTION block.

DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT name, loation INTO s_name, s_loc MULA sa mga mag-aaral SAAN id = s_id DBMS_OUTPUT.PUT_LINE ('Pangalan:' || s_name) DBMS_OUTPUT .PUT_LINE ('Lokasyon:' || s_loc) EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('Walang ganoong mag-aaral!') KAPAG ang iba THEN dbms_output.put_line ('Oops, Error!') END

Paglabas

Walang ganyang estudyante! Matagumpay na nakumpleto ang pamamaraan ng PL / SQL.

Dito, maaari naming ilista ang maraming mga pagbubukod na nais naming hawakan. Pangangasiwaan ang default na pagbubukod gamit ang ‘ KAPAG ang iba TAPOS '

Mga uri ng Exception sa PL / SQL

  • Tinukoy ng system
  • Tumanggi ang gumagamit

Susunod sa artikulong ito sa pagbubukod ng pagbubukod sa PL / SQL , talakayin natin nang detalyado ang tungkol sa parehong uri.



Tinukoy ng system

Natukoy at pinananatili nang implicit ng Oracle server, ang mga pagbubukod na ito ay pangunahing tinukoy sa Oracle Standard Package. Kailanman may isang pagbubukod na nangyayari sa loob ng programa, tumutugma ang server ng Oracle at kinikilala ang naaangkop na pagbubukod mula sa magagamit na hanay ng mga pagbubukod na magagamit sa pamantayan ng oracle. Karaniwan, ang mga pagbubukod na ito ay paunang natukoy sa PL / SQL na tumataas KAPAG ang isang partikular na patakaran sa database ay nilabag .

Ang Mga pagbubukod na tinukoy ng system ay nahahati pa sa dalawang kategorya:

  • Pinangalanang mga pagbubukod ng system
  • Mga hindi nabanggit na system na pagbubukod

Pinangalanang system Exceptions

Ang pinangalanang mga pagbubukod ng PL / SQL ay pinangalanan sa karaniwang pakete ng PL / SQL , samakatuwid ang developer ay hindi kailangang tukuyin ang mga pagbubukod ng PL / SQL sa kanilang code. Nagbibigay ang PL / SQL ng maraming paunang natukoy na pinangalanang mga pagbubukod, na isinasagawa kapag ang anumang patakaran sa database ay nilabag ng isang programa. Ang sumusunod na talahanayan ay naglilista ng ilang mahahalagang paunang natukoy na mga pagbubukod at minus

Pagbubukod Error sa Oracle SQLCODE Paglalarawan
ACCESS_INTO_NULL06530-6530Tinaasan ito kapag ang isang null na bagay ay awtomatikong itinalaga ng isang halaga.
CASE_NOT_FOUND06592-6592Itinaas ito kapag wala sa mga pagpipilian sa WHEN sugnay ng a Pahayag ng KASO napili, at walang ibang sugnay.
COLLECTION_IS_NULL06531-6531Tinaasan ito kung susubukan ng isang programa na mag-apply ng mga pamamaraan ng koleksyon maliban sa EXISTS sa isang hindi pa nasisiyahang nied na mesa o varray, o susubukan ng programa na magtalaga ng mga halaga sa mga elemento ng isang hindi pa nasisiyahang naka-punong mesa o varray.
DUP_VAL_ON_INDEX00001-isaTinaasan ito kapag tinangka ang mga duplicate na halaga na maiimbak sa isang haligi na may natatanging index.
INVALID_CURSOR01001-1001Tinaasan ito kapag sinubukan na gumawa ng isang operasyon ng cursor na hindi pinapayagan, tulad ng pagsasara ng hindi nabuksan na cursor.
DI-WASTONG NUMERO01722-1722Tinaasan ito kapag nabigo ang pag-convert ng isang character string sa isang numero dahil ang string ay hindi kumakatawan sa isang wastong numero.
LOGIN_DENIED01017-1017Nakataas ito kapag ang isang programa ay nagtatangkang mag-log on sa database na may isang hindi wastong username o password.
NO_DATA_FOUND01403+100Tinaasan ito kapag ang isang PILI SA pahayag na binabalik walang mga hilera.
HINDI_LOGGED_ON01012-1012Tinaasan ito kapag ang isang tawag sa database ay inisyu nang hindi nakakonekta sa database.
PROGRAM_ERROR06501-6501Tinaasan ito kapag ang PL / SQL ay may panloob na problema.
ROWTYPE_MISMATCH06504-6504Tinaasan ito kapag nakuha ng isang cursor ang halaga sa isang variable na hindi tugma ang uri ng data.
SELF_IS_NULL30625-30625Tinaasan ito kapag ang isang pamamaraan ng miyembro ay tinawag, ngunit ang halimbawa ng uri ng object ay hindi naisauna.
STORAGE_ERROR06500-6500Ito ay itinaas kapag naubusan ng memorya ang PL / SQL o nasira ang memorya.
TOO_MANY_ROWS01422-1422Tinaasan ito kapag ang isang PILI SA pahayag ay nagbabalik ng higit sa isang hilera.
VALUE_ERROR06502-6502Tinaasan ito kapag naganap ang isang error sa arithmetic, conversion, truncation, o laki ng pagpipigil.
ZERO_DIVIDE014761476Tinaasan ito kapag ang pagtatangka ay ginawang hatiin ang isang numero sa pamamagitan ng zero.

Halimbawa

GUMAWA O PINAPALIT ANG PAMAMARAAN add_new_student (mag-aaral _id_in SA BILANG, mag-aaral _pangalan_sa IN VARCHAR2) AY NAGSIMULA SA PAG-INSERT SA mag-aaral (mag-aaral _id, mag-aaral _name) VALUES (mag-aaral _id_in, mag-aaral _name_in) EXCEPTION KAPAG DUP_VAL_ON_INDEX TH1dagdag ' ) KAPAG IBA PA TAPOS itaas_application_error (-20002, 'Nagkaroon ng error.') TAPOS

Ang pagpapatuloy sa artikulong ito sa paghawak ng pagbubukod sa PL / SQL, ipaalam sa amin na maunawaan kung ano ang mga hindi pinangalanan na mga pagbubukod ng system.

Hindi Pangalan ng Pagbubukod ng System

Ang mga pagbubukod ng system na kung saan ang Oracle ay walang pangalan ay kilala bilang hindi binanggit na mga pagbubukod ng system. Ang mga pagbubukod na ito ay hindi madalas mangyari at nakasulat sa isang code at isang nauugnay na mensahe.

Karaniwan may dalawang paraan upang hawakan ang mga hindi pinangalanan na mga pagbubukod ng system:

1. Paggamit ng WHEN IBA na handler ng pagbubukod

2. Pag-uugnay ng code ng pagbubukod sa isang pangalan at paggamit nito bilang isang may pangalang pagbubukod.

Ang ilang mga hakbang na sinusundan para sa mga hindi pinangalanan na mga pagbubukod ng system ay:

  • Itaas ang mga ito nang implicit.
  • Kung sakaling hindi sila mapangasiwaan sa 'KAPAG Ang Iba' noon, dapat silang hawakan nang malinaw.
  • Upang mahawakan nang malinaw ang pagbubukod, maaari silang ideklara gamit ang Pragma EXCEPTION_INIT at hawakan sa pamamagitan ng pagtukoy sa pangalan ng pagbubukod na tinukoy ng gumagamit sa seksyon ng pagbubukod.

Ang isang halimbawa ng paghawak ng mga hindi pinangalanang mga pagbubukod gamit ang Pragma EXCEPTION_INIT ay ibinigay sa paglaon ng artikulo. Ang paglipat sa artikulong ito sa paghawak ng pagbubukod sa PL / SQL, ipaalam sa amin na maunawaan ang mga excetpion na tinukoy ng User.

Tinukoy ng gumagamit

Tulad ng lahat ng iba pang mga wika sa programa, pinapayagan ka rin ng Oracle na ideklara ang ad na ipatupad ang iyong sariling mga pagbubukod. Hindi tulad ng mga pagbubukod na tinukoy ng system, ang mga pagbubukod na ito ay tahasang itinaas sa PL / SQL block.

Mga hakbang upang ideklara ang mga pagbubukod na tinukoy ng User sa database ng Oracle

Maaari naming tukuyin ang mga pagbubukod na tinukoy ng gumagamit sa Oracle database sa mga sumusunod na 3 paraan:

  • Gumagamit ng Variable na uri ng EXCEPTION

Dito, maaari naming ideklara ang isang pagbubukod na tinukoy ng User sa pamamagitan ng pagdedeklara ng isang variable ng EXCEPTION uri ng datos sa aming code at taasan itong malinaw sa aming programa gamit ang RAISE statement.

  • Gamit ang pagpapaandar ng PRAGMA EXCEPTION_INIT

Maaari naming tukuyin ang isang hindi pa natukoy na numero ng error na may variable ng EXCEPTION datatype

  • Gumagamit ng pamamaraang RAISE_APPLICATION_ERROR

Gamit ang pamamaraang ito, maaari naming ideklara ang isang pagbubukod na tinukoy ng User sa aming sariling pasadyang numero ng error at mensahe.

Hanggang ngayon maaari kang magkaroon ng isang magaspang na ideya sa mga paraan kung saan maaari naming itaas ang mga pagbubukod na tinukoy ng User sa PL / SQL. Malalaman namin ang tungkol sa bawat isa sa mga nabanggit na pamamaraan na may mga halimbawa pa sa artikulong ito sa paghawak ng pagbubukod sa PL / SQL.

Susunod sa artikulong ito, magpatuloy tayo sa mga demonstrasyon ng paghawak ng pagbubukod na tinukoy ng User.

Pagpapakita ng Mga Pagbubukod na tinukoy ng Gumagamit

Ang pagpapatuloy sa artikulong ito sa Exception Handling sa PL / SQL, ipaalam sa amin kung paano gamitin ang variable ng uri ng EXCEPTION.

Gumagamit ng Variable na uri ng EXCEPTION

Ang proseso ng pagdedeklara ng pagbubukod na tinukoy ng gumagamit ay nahahati sa tatlong bahagi at ang 3 bahagi na ito ay:

  • Magdeklara ng isang variable na datatype ng pagbubukod
  • Itaas ang Exception
  • Pangasiwaan ang Exception

Sumulat tayo ng isang code upang maipakita nang detalyado ang mga hakbang sa itaas.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Sa bloke ng deklarasyon sa itaas, mayroon kaming apat na variable, bukod sa kung saan ang unang tatlo ay normal na bilang ng mga variable ng datatype at ang pang-apat na ex_DivZero ay ang espesyal na variable ng datatype na hindi kasama. Ang pang-apat ay ang aming pagbubukod na tinukoy ng gumagamit.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Ang bahagi sa pagpapatupad sa itaas ng hindi nagpapakilalang bloke na ito, ay magkakaroon lamang ng pagkilos kapag ang tagapamahagi ay 0. Kung ang tagapamahagi ay zero tulad ng sa aming kaso, tataas ang error at ang kontrol ng programa ay laktawan ang lahat ng mga susunod na hakbang at Hahanapin ang pagtutugma ng handler ng pagbubukod. Sa kaso kung saan nakakahanap ng anumang iba pa, isasagawa nito ang pagkilos nang naaayon, kung hindi man ay tatapusin nito ang programa o i-prompt kami ng isang hindi nagagalaw na error na tinukoy ng system.

EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE (‘ERROR, The divisor cannot be zero’)

Ito ang handler ng pagbubukod. Sa sandaling ipasok ng gumagamit ang divisor bilang 0, sasabihan ang string ng mensahe sa itaas.

Pangwakas na Code:

DECLARE var_dividend NUMBER: = 10 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_div = DB) = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Ang pagpapatuloy sa artikulong ito sa paghawak ng pagbubukod sa PL / SQL, ipaunawa sa amin kung paano gamitin ang pamamaraang PRAGMA_EXCEPTION_INIT.

Gamit ang pagpapaandar ng PRAGMA EXCEPTION_INIT

Nasa Pag-andar ng PRAGMA EXCEPTION_INIT, isang pangalan ng pagbubukod ang nauugnay sa isang numero ng error sa Oracle. Ang pangalang ito ay maaaring magamit sa pagdidisenyo ng handler ng pagbubukod para sa error.Para sa mga malalaking proyekto na may maraming mga error na tinukoy ng gumagamit, ang PRAGMA EXCEPTION_INIT ay ang pinaka kapaki-pakinabang at angkop na pamamaraan.

Syntax:

PRAGMA EXCEPTION_INIT (exception_name, -Oracle_error_number)

Halimbawa

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN Null - Ang ilang operasyon na nagsasanhi ng isang error na ORA-00060 EXCEPTION KAPAG deadlock_detected THO NULL - hawakan ang error END

Sinasabi ng PRAGMA EXCEPTION_INIT sa tagatala na iugnay ang isang pangalan ng pagbubukod sa isang numero ng error sa Oracle tulad ng nabanggit kanina. Hinahayaan ka nitong mag-refer sa anumang panloob na pagbubukod ayon sa pangalan at magsulat ng isang tukoy na handler para dito. Kapag nakakita ka ng isang error na stack, o pagkakasunud-sunod ng mga mensahe ng error, ang nasa itaas ay ang maaaring ma-trap at hawakan.

Ang pagpapatuloy sa artikulong ito sa Exception Handling sa PL / SQL, ipaunawa sa amin kung paano gamitin ang pamamaraan na RAISE_APPLICATION_ERROR.

Gumagamit ng pamamaraang RAISE_APPLICATION_ERROR

Ito ay isang pamamaraan na kasama ng oracle software. Gamit ang pamamaraang ito maaari naming maiugnay ang isang numero ng error sa isang pasadyang mensahe ng error. Pinagsasama ang parehong numero ng error at ang pasadyang mensahe ng error, ang isang error string ay maaaring mabuo na mukhang katulad sa mga default na mga string ng error na ipinapakita ng oracle kapag may nakasalubong na error. Ang pamamaraan ng RAISE_APPLICATION_ERROR ay matatagpuan sa loob ng DBMS_STANDARD package

Syntax

taas_application_error (error_number, mensahe [, TRUE])

Halimbawa

/ * Isang nag-trigger trg_emp_detail_chk ay nilikha. * / LIKHA O PALIT ANG TRIGGER trg_emp_detail_chk / * Ang oras ng pag-trigger ay idineklara bilang BAGO I-UPDATE sa talahanayan ng mga EMPLOYEES. * / Bago I-UPDATE SA mga empleyado DECLARE permiso_denied EXCEPTION BEGIN / * Simula ng KUNG kondisyon na sinusuri kung ang pagsisiyasat ng KUNG kondisyon araw ng oras ng system ay alinman sa Sabado o Linggo o hindi. * / KUNG trim (TO_CHAR (sysdate, 'Day')) SA ('Saturday', 'Sunday') THEN pagtaas_application_error (-20000, 'Hindi ka awtorisadong gawin anumang pagbabago sa katapusan ng linggo !! ') / * Ang pamamaraang pagtaas_application_error ay tinawag na may unang halaga ng parameter bilang -20000 at ang pangalawang parameter na may isang default na teksto na nagsasaad na ang gumagamit ay hindi pinahintulutan na gumawa ng anumang pagbabago sa mga katapusan ng linggo. * / WAKAS KUNG TAPOS

Sa pamamagitan nito natapos namin ang artikulong ito sa 'Exception na paghawak sa PL / SQL'. Umaasa ako na ang paksang ito ay naintindihan nang mabuti at nakatulong sa iyo. Subukang isulat ang iyong sariling mga code at isama ang mga pamamaraan na ipinaliwanag sa artikulong ito.

Kung nais mong maging sanay mula sa mga propesyonal sa teknolohiyang ito, maaari kang pumili para sa nakabalangkas na pagsasanay mula sa edureka! Tingnan mo ito ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Sinasanay ka ng kursong ito sa mga pangunahing konsepto at mga advanced na tool at diskarte upang pamahalaan ang data at pangasiwaan ang MySQL Database. Kasama dito ang hands-on na pag-aaral sa mga konsepto tulad ng MySQL Workbench, MySQL Server, Data Modelling, MySQL Connector, Database Design, MySQL Command line, MySQL Function atbp Pagtatapos ng pagsasanay magagawa mong lumikha at pangasiwaan ang iyong sariling MySQL Database at pamahalaan data

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng artikulong 'Exception Handling in PL / SQL' at babalikan ka namin sa lalong madaling panahon.