Obteniu informació sobre com gestionar les excepcions a PL / SQL



Aquest article és una guia completa sobre com realitzar el tractament d’excepcions a PL / SQL en discutir els diversos tipus d’excepcions que s’ofereixen a PL / SQL.

Si sou un programador, potser estareu familiaritzats amb el concepte que la manipulació d’excepcions és una part integral de qualsevol . Com que els errors són inevitables i fins i tot els més intel·ligents de nosaltres podem cometre errors mentre escrivim codi, hem de conèixer com gestionar-los. En aquest article, aprendrem particularment sobre el tractament d’excepcions a PL / SQL.

Gestió d’excepcions SQL a PL / SQL-EdurekaA continuació es detallen els temes tractats en aquest article:





Què és una excepció?

Qualsevol condició o esdeveniment anormal que interrompi el flux normal de les instruccions del nostre programa en temps d'execució o, en paraules simples, una excepció és un error.

Sintaxi del maneig d'excepcions a PL / SQL

DECLARAR COMENÇAR L’EXCEPCIÓ QUAN excepció1 DESPRÉS excepcions1-instruccions-manipulació QUAN excepció2 DESPRÉS excepció2-instruccions-manipulació QUAN excepció3 DESPRÉS excepció3-instruccions-manipulació ........ QUAN altres DESPRÉS excepció3-instruccions-manipulació FI

Aquí podem enumerar tantes excepcions com vulguem gestionar. L'excepció predeterminada es gestionarà mitjançant 'QUAN altres després'



Exemple de maneig d'excepcions a PL / SQL

El programa següent mostra el nom i l'adreça d'un estudiant amb identificació. Com que no hi ha cap estudiant amb el valor d'identificació 8 a la nostra base de dades, el programa genera l'excepció en temps d'execució NO_DATA_FOUND, que es captura al bloc EXCEPTION.

DECLARA 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 FROM students WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Ubicació:' || s_loc) EXCEPCIÓ QUAN no_data_found THEN dbms_output.put_line ('No hi ha estudiant!') QUAN altres THEN dbms_output.put_line ('Vaja, error!') FINALITZACIÓ

Sortida

No hi ha cap estudiant! El procediment PL / SQL s'ha completat correctament.

Aquí podem enumerar tantes excepcions com vulguem gestionar. L’excepció per defecte es gestionarà mitjançant ‘ QUAN altres DESPRÉS '

Tipus d’excepcions a PL / SQL

  • Sistema definit
  • L'usuari ha desafiat

A continuació, en aquest article sobre el tractament d'excepcions a PL / SQL , comentem detalladament aquests dos tipus.



Sistema definit

Definides i mantingudes implícitament pel servidor Oracle, aquestes excepcions es defineixen principalment al paquet estàndard Oracle. Sempre que es produeix una excepció dins del programa, el servidor Oracle coincideix i identifica l'excepció adequada del conjunt disponible d'excepcions disponibles al paquet estàndard d'Oracle. Bàsicament, aquestes excepcions estan predefinides a PL / SQL que es planteja QUAN es vulnera una regla de base de dades particular .

El Excepcions definides pel sistema es divideixen en dues categories:

  • Excepcions del sistema amb nom
  • Excepcions del sistema sense nom

Excepcions del sistema anomenat

Les excepcions PL / SQL esmentades són anomenat al paquet estàndard de PL / SQL , per tant, el desenvolupador no necessita definir les excepcions PL / SQL al seu codi. PL / SQL proporciona moltes excepcions anomenades predefinides, que s’executen quan un programa infringeix qualsevol regla de base de dades. A la taula següent es detallen algunes de les excepcions i menys predefinides importants

Excepció Error d'Oracle SQLCODE Descripció
ACCESS_INTO_NULL06530-6530Es planteja quan a un objecte nul se li assigna automàticament un valor.
CASE_NOT_FOUND06.592-6592Es planteja quan cap de les opcions de la clàusula WHEN de a Declaració CASE està seleccionat i no hi ha cap clàusula ELSE.
COLLECTION_IS_NULL06.531-6531Es planteja quan un programa intenta aplicar mètodes de recopilació diferents de EXISTS a una taula o varray imbricats no inicialitzats, o bé el programa intenta assignar valors als elements d'una taula o varray imbricats no inicialitzats.
DUP_VAL_ON_INDEX00001-1Es planteja quan s’intenta emmagatzemar valors duplicats en una columna amb un índex únic.
INVALID_CURSOR01001-1001Es planteja quan s’intenta fer una operació de cursor que no està permesa, com ara tancar un cursor sense obrir.
INVALID_NUMBER01722-1722Es planteja quan falla la conversió d'una cadena de caràcters en un número perquè la cadena no representa un número vàlid.
LOGIN_DENIED01017-1017Es genera quan un programa intenta iniciar la sessió a la base de dades amb un nom d'usuari o una contrasenya no vàlids.
NO S'HAN TROBAT DADES01403+100Es planteja quan una sentència SELECT INTO no retorna cap fila.
NOT_LOGGED_ON01012-1012S’activa quan s’emet una trucada a la base de dades sense estar connectada a la base de dades.
PROGRAM_ERROR06501-6501Es planteja quan PL / SQL té un problema intern.
ROWTYPE_MISMATCH06.504-6504Es planteja quan un cursor obté valor en una variable que té un tipus de dades incompatible.
SELF_IS_NULL30625-30.625Es planteja quan s'invoca un mètode membre, però no s'ha inicialitzat la instància del tipus d'objecte.
STORAGE_ERROR06500-6500Es genera quan PL / SQL es queda sense memòria o la memòria es corrompia.
TOO_MANY_ROWS01422-1422Es planteja quan una sentència SELECT INTO retorna més d'una fila.
VALOR_ERROR06502-6502Es planteja quan es produeix un error de restricció de mida, conversió, truncament o mida.
ZERO_DIVIDE014761476Es planteja quan s’intenta dividir un nombre per zero.

Exemple

CREA O SUBSTITUEIX PROCEDIMENT add_new_student (estudiant _id_in EN NÚMERO, estudiant _name_in A VARCHAR2) ES COMENÇA A INSERIR A estudiant (student _id, student _name) VALORS (student _id_in, student _name_in) EXCEPTION WHEN DUP_VAL_ON_INDEX THOR ) QUAN ALTRES DESPRÉS augmentar_aplicació_error (-20002, 'S'ha produït un error.') FINAL

A continuació, en aquest article sobre la gestió d'excepcions a PL / SQL, entenem què són les excepcions del sistema sense nom.

per què hauríeu d'aprendre el pitó?

Excepcions del sistema sense nom

Les excepcions del sistema per a les quals Oracle no té un nom es coneixen com a excepcions del sistema sense nom. Aquestes excepcions no es produeixen amb freqüència i s’escriuen amb un codi i un missatge associat.

Bàsicament hi ha dues maneres de gestionar excepcions de sistema sense nom:

1. Utilització del controlador d'excepcions WHEN OTHERS

2. Associar el codi d'excepció a un nom i utilitzar-lo com a excepció amb nom.

Alguns passos seguits per a les excepcions del sistema sense nom són:

  • Elevar-los implícitament.
  • En cas que no es manipulin a 'QUAN Altres', s'hauran de gestionar explícitament.
  • Per gestionar l'excepció de manera explícita, es poden declarar mitjançant Pragma EXCEPTION_INIT i gestionar-les fent referència al nom d'excepció definit per l'usuari a la secció d'excepció.

Més endavant a l'article es proporciona un exemple de maneig d'excepcions sense nom mitjançant Pragma EXCEPTION_INIT. A continuació, en aquest article sobre el maneig d’excepcions a PL / SQL, entenem les exclusions definides per l’usuari.

Usuari definit

Igual que la resta de llenguatges de programació, Oracle també us permet declarar la implementació d’anuncis de les vostres excepcions. A diferència de les excepcions definides pel sistema, aquestes excepcions es plantegen explícitament al bloc PL / SQL.

gestió de compres en gestió de projectes

Passos per declarar excepcions definides per l'usuari a la base de dades Oracle

Podem definir excepcions definides per l'usuari a la base de dades Oracle de les 3 maneres següents:

  • S’utilitza una variable de tipus EXCEPTION

Aquí, podem declarar una excepció definida per l'usuari declarant una variable EXCEPTION tipus de dades al nostre codi i augmentar-lo explícitament al nostre programa mitjançant la instrucció RAISE.

  • Utilitzant la funció PRAGMA EXCEPTION_INIT

Podem definir un número d’error no predefinit amb la variable de tipus de dades EXCEPTION

  • Utilitzant el mètode RAISE_APPLICATION_ERROR

Mitjançant aquest mètode, podem declarar una excepció definida per l’usuari amb el nostre propi número d’error i missatge personalitzats.

Fins ara és possible que tingueu una idea aproximada de les maneres en què podem plantejar excepcions definides per l'usuari a PL / SQL. En aquest article coneixerem cadascun dels mètodes esmentats amb exemples sobre el tractament d’excepcions a PL / SQL.

A continuació, en aquest article, continuem amb les demostracions del tractament d'excepcions definit per l'usuari.

Demostració d’excepcions definides per l’usuari

Seguint aquest article sobre Gestió d'excepcions a PL / SQL, entenem com s'utilitza la variable de tipus EXCEPTION.

S’utilitza una variable de tipus EXCEPTION

El procés de declaració de l'excepció definida per l'usuari es divideix en tres parts i aquestes 3 parts són:

  • Declareu un tipus de dades d’excepció de variable
  • Augmenteu l’excepció
  • Gestioneu l'excepció

Escrivim un codi per demostrar detalladament els passos anteriors.

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

Al bloc de declaració anterior, tenim quatre variables, entre les quals les tres primeres són variables de tipus de dades de nombre normal i la quarta que és ex_DivZero és la variable de tipus de dades d’excepció especial. El quart és la nostra excepció definida per l'usuari.

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

La part d’execució anterior d’aquest bloc anònim només entrarà en acció quan el divisor sigui 0. Si el divisor és zero com és el nostre cas, l’error es generarà i el control del programa saltarà tots els passos següents i cercarà un gestor d'excepcions coincident. En el cas que en trobi algun altre, realitzarà l'acció en conseqüència, en cas contrari, donarà per finalitzat el programa o ens sol·licitarà un error definit pel sistema sense gestionar-lo.

EXCEPCIÓ QUAN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE ('ERROR, el divisor no pot ser zero')

Aquest és el controlador d'excepcions. Tan bon punt l'usuari introdueix el divisor com a 0, se us demanarà la cadena de missatges anterior.

Codi final:

DECLARAR 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 ('Resultat =' VAR_res = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

A continuació, en aquest article sobre el tractament d'excepcions a PL / SQL, entenem com utilitzar el mètode PRAGMA_EXCEPTION_INIT.

Utilitzant la funció PRAGMA EXCEPTION_INIT

A la Funció PRAGMA EXCEPTION_INIT, un nom d’excepció s’associa a un número d’error Oracle. Aquest nom es pot utilitzar per dissenyar el controlador d'excepcions per a l'error.Per a projectes immensos amb molts errors definits per l'usuari, PRAGMA EXCEPTION_INIT és el mètode més útil i adequat.

Sintaxi:

PRAGMA EXCEPTION_INIT (nom_excepció, -número_error_oracle)

Exemple

DECLARA deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Alguna operació que provoca un error ORA-00060 EXCEPCIÓ QUAN deadlock_detected THEN NULL - gestiona l'error FINALITZA

El PRAGMA EXCEPTION_INIT indica al compilador que associe un nom d’excepció a un número d’error Oracle com s’ha esmentat anteriorment. Us permet referir-vos a qualsevol excepció interna per nom i escriure-hi un controlador específic. Quan veieu una pila d'errors o una seqüència de missatges d'error, la que hi ha a la part superior és la que es pot atrapar i gestionar.

implementar la cua de prioritat c ++

Seguint en aquest article sobre Manipulació d'excepcions a PL / SQL, entenem com utilitzar el mètode RAISE_APPLICATION_ERROR.

Utilitzant el mètode RAISE_APPLICATION_ERROR

És un procediment integrat amb el programari Oracle. Mitjançant aquest procediment podem associar un número d’error a un missatge d’error personalitzat. Combinant tant el número d'error com el missatge d'error personalitzat, es pot compondre una cadena d'error que s'assembli a les cadenes d'error per defecte que mostren Oracle quan es produeix un error. El procediment RAISE_APPLICATION_ERROR es troba dins del paquet DBMS_STANDARD

Sintaxi

raise_application_error (error_number, missatge [, TRUE])

Exemple

/ * Es crea un activador trg_emp_detail_chk. * / CREAR O SUBSTITUIR EL TRIGGER trg_emp_detail_chk / * El temps de desencadenament es declara com ABANS DE LA ACTUALITZACIÓ a la taula EMPLOYEES. * / Abans de l’actualització dels empleats DECLAREU permís_denegat EXCEPCIÓ COMENÇA / * Inici de la condició IF comprovant si la condició IF comprova si el dia de l'hora del sistema és dissabte o diumenge o no. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN raise_application_error (-20000, 'No esteu autoritzat a fer-ho) qualsevol modificació als caps de setmana !! ') / * El procediment raise_application_error es diu amb el primer valor de paràmetre com -20000 i el segon paràmetre amb un text per defecte que indica que l'usuari no està autoritzat a fer cap modificació els caps de setmana. * / ACABAR SI ACABA

Amb això, arribem al final d’aquest article sobre “Gestió d’excepcions a PL / SQL”. Espero que aquest tema s’entengui bé i us ajudi. Intenteu escriure els vostres propis codis i incorporar els mètodes explicats en aquest article.

Si voleu formar-vos amb professionals sobre aquesta tecnologia, podeu optar per una formació estructurada a edureka. Mireu això per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. Aquest curs us capacita sobre els conceptes bàsics i les eines i tècniques avançades per gestionar les dades i administrar la base de dades MySQL. Inclou aprenentatge pràctic sobre conceptes com MySQL Workbench, MySQL Server, Modelització de dades, MySQL Connector, Disseny de bases de dades, Línia d’ordres MySQL, Funcions MySQL, etc. Finalització de la formació podreu crear i administrar la vostra pròpia base de dades MySQL i gestionar-la. dades.

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest article “Gestió d’excepcions a PL / SQL” i us respondrem el més aviat possible.