complete guide pl sql exception handling with examples
Aquest tutorial explica el maneig d’excepcions de PL SQL i conceptes relacionats com tipus d’excepcions, excepcions definides per l’usuari i definides pel sistema, com plantejar una excepció, etc.:
En Format de data i hora PL / SQL de Sèrie PL / SQL , hem conegut algunes funcions útils al voltant de Datetime, Timestamp i Interval
En aquest article, discutirem el tractament d’excepcions a PL SQL. A més, explorarem els avantatges de les excepcions i com plantejar-les.
Comencem pels aprenentatges !!
Què aprendreu:
Gestió d'excepcions PL SQL
Un error o un esdeveniment d’advertència s’anomena excepció. Es troba durant l'execució en temps d'execució del programa PL / SQL. PL / SQL té mecanismes per gestionar aquestes condicions excepcionals amb l'ajut del bloc de codi EXCEPTION on es defineix com contrarestar la condició d'error.
Hi ha dos tipus d’excepcions. Es detallen a continuació:
- Excepcions definides per l'usuari.
- Excepcions definides pel sistema.
Algunes de les populars excepcions definides pel sistema són sense memòria i divisió per zero, amb noms com STORAGE_ERROR i ZERO_DIVIDE respectivament. Les excepcions definides per l'usuari es declaren en un paquet, subprograma o dins de la secció de declaració del bloc de codi PL / SQL i se'ls ha d'assignar noms.
Un cop es produeix una excepció, es deté el flux natural d'execució i l'execució apunta a la secció d'excepció del codi PL / SQL. Tot i que les excepcions definides pel sistema es generen per defecte, les definides per l'usuari han de ser llançades explícitament per la paraula clau RAISE.
Per tant, la gestió d'excepcions ajuda a fer front als errors que es produeixen durant l'execució del temps d'execució i no durant la compilació del programa.
Avantatges del maneig d’excepcions
A continuació es detallen els avantatges:
- Si el nostre codi no té una gestió d’excepcions, cada vegada que executem una sentència hem de verificar els errors en l’execució.
- Si evitem la manipulació d’excepcions al nostre codi, es perden els errors reals que donen lloc a altres errors.
- La gestió de les excepcions permet ometre diverses verificacions al codi.
- Proporciona una millor llegibilitat del codi aïllant els controladors d'errors al codi.
Sintaxi del maneig d'excepcions:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
L'excepció per defecte es realitza amb QUAN altres DESPRÉS.
el millor programari de convertidor de vídeo per a Mac
Considerem una taula que s’anomena CIUTADÀ .
SELECT * FROM CITIZEN;
Hem creat la taula CITIZEN amb l'ajut de la sentència SQL que es mostra a continuació.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Inseriu valors a aquesta taula amb les sentències SQL que es donen a continuació:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementació de codificació amb tractament d'excepcions:
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; /
La sortida del codi anterior:
Al codi anterior, com que no hi ha ciutadans amb 9 anys a la taula CITIZEN, es planteja una excepció en temps d'execució.
Augmentar l'excepció a PL / SQL
Els desenvolupadors poden plantejar una excepció explícitament amb l'ajut de la paraula clau RAISE.
La sintaxi per augmentar les excepcions:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Aquí, exception_n és el nom de l’excepció que estem plantejant. D’aquesta manera, podem plantejar excepcions definides per l’usuari i definides pel sistema.
Excepció definida per l'usuari
Els desenvolupadors poden crear les seves pròpies excepcions i utilitzar-les per manejar errors. Es poden crear a la part de declaració d'un subprograma i només es pot accedir dins d'aquest subprograma.
Una excepció que es crea a nivell de paquet es pot utilitzar sempre que s'accedeixi al paquet. Es pot plantejar una excepció definida per l'usuari mitjançant la paraula clau RAISE.
La sintaxi d'un error definit per l'usuari és:
DECLARE exception_n EXCEPTION;
Aquí, el excepció_n és el nom de l'excepció que estem plantejant. Per tant, podem declarar una excepció donant un nom seguit de la paraula clau EXCEPTION. Es pot declarar una excepció de manera similar a la declaració de variables. Tanmateix, una excepció és una condició inesperada i no un element de dades.
Àmbit d'excepció a PL / SQL:
A continuació es detallen les regles d’abast de l’excepció PL / SQL:
- No es pot declarar una excepció més d'una vegada al mateix bloc de codi. Però podem declarar la mateixa excepció en dos blocs de codi diferents.
- Una excepció declarada dins d'un bloc de codi és local dins d'aquest bloc i és global per a cada subbloc.
- Si tornem a declarar una excepció global dins d’un subbloc, la declaració local anul·la.
Considerem de nou una taula que es diu CITIZEN.
Implementació de codi amb excepcions definides per l'usuari:
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; /
La sortida del codi anterior:
Excepció predefinida
En violació de les regles de la base de dades o més enllà del llindar dependent del sistema, es genera automàticament una excepció interna. Tots aquests errors tenen un número únic i totes les excepcions es defineixen com a nom. Per exemple, PL / SQL genera NO_DATA_FOUND excepció predefinida quan una consulta SELECT no obté cap fila.
Totes les excepcions predefinides de PL / SQL es declaren al paquet STANDARD que tracta de l'entorn PL / SQL.
Excepció | Error d'Oracle | CODI SQL | Descripció |
---|---|---|---|
INVALID_NUMBER | TEMPS - 01722 | -1722 | Aquesta excepció es planteja si la conversió a una cadena de caràcters a un número no passa, ja que la cadena representa un número no vàlid. |
ACCESS_INTO_NULL | ARA - 06530 | -6530 | Aquesta excepció es genera si a un objecte nul se li assigna un valor naturalment. |
CASE_NOT_FOUND | ARA - 06592 | -6592 | Aquesta excepció es planteja si no es tria cap de les opcions de la clàusula WHEN i no existeix cap clàusula ELSE. |
COLLECTION_IS_NULL | ARA - 06531 | -6531 | Aquesta excepció es genera quan el codi intenta aplicar mètodes de recopilació excepte EXISTS a una taula o varray imbricats que no s’inicialitza. També es pot augmentar si el nostre codi intenta assignar valors a una taula o varray imbricats que no estan inicialitzats. |
DUP_VAL_ON_INDEX | HORA - 00001 | -1 | Aquesta excepció es planteja si s'intenta que els valors duplicats s'emmagatzemin en una columna restringida per un índex únic. |
CURSOR_ALREADY_OPEN | ARA - 06511 | -6511 | Aquesta excepció es planteja si el nostre codi intenta obrir un cursor ja obert. |
INVALID_CURSOR | HORA - 01001 | -1001 | Aquesta excepció es planteja si intentem fer algunes operacions en els cursors que no estan permeses. Per exemple, intentar tancar un cursor ja tancat. |
LOGIN_DENIED | TEMPS - 01017 | -1017 | Aquesta excepció es planteja si el programa ha intentat iniciar la sessió a la base de dades amb un nom d'usuari i una contrasenya incorrectes. |
NO S'HAN TROBAT DADES | TEMPS - 01403 | 100 | Aquesta excepció es genera si una consulta SELECT no obté cap fila. |
NOT_LOGGED_ON | TEMPS - 01012 | -1012 | Aquesta excepció es planteja si intentem fer una operació de base de dades sense connectar-nos-hi. |
PROGRAM_ERROR | HORA - 06501 | -6501 | Aquesta excepció es planteja si el programa PL / SQL ha trobat un error intern. |
ROWTYPE_MISMATCH | HORA - 06504 | -6504 | Aquesta excepció es genera si un cursor intenta retornar valors a una variable amb un tipus de dades incompatible. |
SELF_IS_NULL | ARA - 30625 | -30.625 | Aquesta excepció es planteja si es crida a un mètode membre sense inicialitzar el seu tipus d'objecte. |
STORAGE_ERROR | ARA - 06500 | -6500 | Aquesta excepció es planteja si el programa PL / SQL s'ha quedat sense memòria o si la memòria es corrompia mentre s'executava. |
TOO_MANY_ROWS | TEMPS - 01422 | -1422 | Aquesta excepció es genera si una consulta SELECT obté diverses files. |
SUBSCRIPT_BEYOND_COUNT | ARA - 06533 | -6533 | Aquesta excepció es genera si un subíndex supera el recompte total del nombre d'elements de la col·lecció. |
SUBSCRIPT_OUTSIDE_LIMIT | ARA - 06532 | -6532 | Aquesta excepció es planteja si un subíndex està més enllà de l'interval de llindar. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Aquesta excepció es planteja si la conversió a una cadena de caràcters a un identificador de fila universal no passa, ja que la cadena de caràcters representa un identificador de fila no vàlid. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Aquesta excepció es planteja si Oracle espera un recurs. |
VALOR_ERROR | ORA-06502 | -6502 | Aquesta excepció es planteja si es produeix un error matemàtic, de conversió i de truncament al nostre programa. |
ZERO_DIVIDE | ORA-01476 | -1476 | Aquesta excepció es planteja si intentem dividir un nombre per 0. |
Preguntes i respostes freqüents
P # 1) Què és una excepció predefinida a PL / SQL?
Resposta: PL / SQL genera una excepció predefinida automàticament si un programa incompleix les regles de la base de dades.
Q # 2) Què és el tractament d'excepcions PL / SQL i per què és necessari?
Resposta: Un error o un esdeveniment inesperat al programa s’anomena excepció. Atura el flux normal d'execució del programa. A PL / SQL, l'excepció es gestiona dins d'un bloc EXCEPTION al codi i es descriu l'acció adequada contra l'excepció dins d'aquest bloc.
P # 3) Què s'entén per tractament d'excepcions?
Resposta: És el mètode de resposta a esdeveniments inesperats que es poden produir mentre s’executa el codi.
Q # 4) Quines són les dues formes de tractament d'errors?
Resposta: Les dues formes de tractament d'errors inclouen error en temps de compilació i error d'execució . L'error de temps d'execució es produeix durant l'execució del programa a causa d'una lògica o dades incorrectes. Els errors en temps de compilació es detecten durant la compilació del nostre codi.
convertidor de youtube a mp4 descàrrega gratuïta de la versió completa
Q # 5) Quina diferència hi ha entre error i excepció?
Resposta: Les excepcions són incidents que es gestionen amb l'ajut del bloc try / catch i que es poden trobar tant en temps de compilació com en temps d'execució de l'execució del programa. D'altra banda, els errors només es produeixen en temps d'execució.
Conclusió
En aquest tutorial, hem analitzat en detall alguns conceptes bàsics de PL / SQL que són essencials per gestionar les excepcions dels nostres programes.
A continuació, hem tractat els temes següents:
- Excepcions.
- Tipus d’excepcions.
- Algunes excepcions predefinides.
En el següent tutorial, parlarem de les transaccions PL / SQL, conceptes OOPS i molts altres temes connectats.
Lectura recomanada
- Tutorial de maneig d'excepcions C # amb exemples de codi
- Excepcions de Java i tractament d’excepcions amb exemples
- Paquet PL SQL: tutorial del paquet PL / SQL d'Oracle amb exemples
- Gestió d'excepcions a C ++
- Tutorial PL SQL per a principiants amb exemples | Què és PL / SQL
- Tutorial de PL SQL Records amb exemples