Aprenda a manejar excepciones en PL / SQL



Este artículo es una guía completa sobre cómo realizar el manejo de excepciones en PL / SQL al analizar los diversos tipos de excepciones que se ofrecen en PL / SQL.

Si es un programador, es posible que esté familiarizado con el concepto de que el manejo de excepciones es una parte integral de cualquier . Como los errores son inevitables e incluso el más inteligente de nosotros puede cometer errores al escribir código, debemos estar familiarizados con cómo manejarlos. En este artículo, aprenderemos particularmente sobre el manejo de excepciones en PL / SQL.

Manejo de excepciones SQL en PL / SQL-EdurekaA continuación, se muestran los temas cubiertos en este artículo:





matriz de objetos de clase java

¿Qué es una excepción?

Cualquier condición o evento anormal que interrumpa el flujo normal de las instrucciones de nuestro programa en tiempo de ejecución o, en palabras simples, una excepción es un error.

Sintaxis del manejo de excepciones en PL / SQL

DECLARAR COMENZAR EXCEPCIÓN CUANDO excepción1 ENTONCES sentencias-manejo-excepción1 CUANDO excepción2 ENTONCES sentencias-manejo-excepción2 CUANDO excepción3 ENTONCES sentencias-manejo-excepción3 ........ CUANDO otros ENTONCES sentencias-manejo-excepción3 END

Aquí, podemos enumerar tantas excepciones como queramos manejar. La excepción predeterminada se manejará usando 'CUANDO otros ENTONCES'



Ejemplo de manejo de excepciones en PL / SQL

El programa a continuación muestra el nombre y la dirección de un estudiante cuya identificación se proporciona. Dado que no hay ningún estudiante con el valor de identificación 8 en nuestra base de datos, el programa genera la excepción de tiempo de ejecución NO_DATA_FOUND, que se captura en el bloque EXCEPTION.

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 FROM estudiantes WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Ubicación:' || s_loc) EXCEPCIÓN CUANDO no_data_found ENTONCES dbms_output.put_line ('¡No hay tal estudiante!') CUANDO otros ENTONCES dbms_output.put_line ('¡Vaya, Error!') FIN

Salida

¡No hay tal estudiante! Procedimiento PL / SQL completado con éxito.

Aquí, podemos enumerar tantas excepciones como queramos manejar. La excepción predeterminada se manejará mediante ' CUANDO otros ENTONCES

Tipos de excepciones en PL / SQL

  • Definido por el sistema
  • Usuario desafiado

A continuación en este artículo sobre el manejo de excepciones en PL / SQL , analicemos en detalle ambos tipos.



Definido por el sistema

Definidas y mantenidas implícitamente por el servidor de Oracle, estas excepciones se definen principalmente en el paquete estándar de Oracle. Siempre que ocurre una excepción dentro del programa, el servidor de Oracle hace coincidir e identifica la excepción apropiada del conjunto disponible de excepciones disponibles en el paquete estándar de Oracle. Básicamente, estas excepciones están predefinidas en PL / SQL que se eleva CUANDO se infringe una regla de base de datos particular .

los Excepciones definidas por el sistema se dividen además en dos categorías:

  • Excepciones del sistema con nombre
  • Excepciones del sistema sin nombre

Excepciones del sistema con nombre

Las excepciones PL / SQL nombradas son nombrado en el paquete estándar de PL / SQL , por lo tanto, el desarrollador no necesita definir las excepciones PL / SQL en su código. PL / SQL proporciona muchas excepciones con nombre predefinidas, que se ejecutan cuando un programa viola cualquier regla de la base de datos. La siguiente tabla enumera algunas de las importantes excepciones y menos

Excepción Error de Oracle SQLCODE Descripción
ACCESS_INTO_NULL06530-6530Se genera cuando a un objeto nulo se le asigna automáticamente un valor.
CASE_NOT_FOUND06592-6592Se genera cuando ninguna de las opciones de la cláusula WHEN de un Declaración CASE está seleccionado y no hay cláusula ELSE.
COLLECTION_IS_NULL06531-6531Se genera cuando un programa intenta aplicar métodos de recopilación distintos de EXISTS a una tabla anidada o varray no inicializada, o el programa intenta asignar valores a los elementos de una tabla anidada o varray no inicializada.
DUP_VAL_ON_INDEX00001-1Se genera cuando se intenta almacenar valores duplicados en una columna con un índice único.
INVALID_CURSOR01001-1001Se genera cuando se intenta realizar una operación del cursor que no está permitida, como cerrar un cursor sin abrir.
NÚMERO INVALIDO01722-1722Se genera cuando falla la conversión de una cadena de caracteres en un número porque la cadena no representa un número válido.
LOGIN_DENIED01017-1017Se genera cuando un programa intenta iniciar sesión en la base de datos con un nombre de usuario o contraseña no válidos.
DATOS NO ENCONTRADOS01403+100Se genera cuando una instrucción SELECT INTO no devuelve filas.
NOT_LOGGED_ON01012-1012Se genera cuando se emite una llamada a la base de datos sin estar conectado a la base de datos.
PROGRAM_ERROR06501-6501Se genera cuando PL / SQL tiene un problema interno.
ROWTYPE_MISMATCH06504-6504Se genera cuando un cursor obtiene valor en una variable que tiene un tipo de datos incompatible.
SELF_IS_NULL30625-30625Se genera cuando se invoca un método miembro, pero la instancia del tipo de objeto no se inicializó.
STORAGE_ERROR06500-6500Se genera cuando PL / SQL se quedó sin memoria o la memoria se corrompió.
TOO_MANY_ROWS01422-1422Se genera cuando una instrucción SELECT INTO devuelve más de una fila.
VALUE_ERROR06502-6502Se genera cuando se produce un error aritmético, de conversión, de truncamiento o de restricción de tamaño.
ZERO_DIVIDE014761476Se eleva cuando se intenta dividir un número por cero.

Ejemplo

CREAR O REEMPLAZAR EL PROCEDIMIENTO add_new_student (student _id_in IN NUMBER, student _name_in IN VARCHAR2) COMIENZA INSERT INTO student (student _id, student _name) VALUES (student _id_in, student _name_in) EXCEPTION WHEN DUP_VAL_ON_INDEX THEN_error_application _ ) CUANDO OTROS ENTONCES raise_application_error (-20002, 'Ocurrió un error') END

Continuando en este artículo sobre el manejo de excepciones en PL / SQL, entendamos qué son las excepciones del sistema sin nombre.

Excepciones del sistema sin nombre

Las excepciones del sistema para las que Oracle no tiene un nombre se conocen como excepciones del sistema sin nombre. Estas excepciones no ocurren con frecuencia y están escritas con un código y un mensaje asociado.

Básicamente, hay dos formas de manejar las excepciones del sistema sin nombre:

1. Uso del controlador de excepciones WHEN OTHERS

2. Asociar el código de excepción a un nombre y usarlo como una excepción con nombre.

Algunos pasos seguidos para las excepciones del sistema sin nombre son:

  • Criarlos implícitamente.
  • En caso de que no se manejen en 'CUANDO Otros', entonces, deben manejarse explícitamente.
  • Para manejar la excepción explícitamente, se pueden declarar usando Pragma EXCEPTION_INIT y manejar haciendo referencia al nombre de excepción definido por el usuario en la sección de excepciones.

Más adelante en el artículo se proporciona un ejemplo de cómo manejar excepciones sin nombre usando Pragma EXCEPTION_INIT. Continuando en este artículo sobre el manejo de excepciones en PL / SQL, entendamos las exceciones definidas por el usuario.

Usuario definido

Como todos los demás lenguajes de programación, Oracle también le permite declarar implementaciones publicitarias sus propias excepciones. A diferencia de las excepciones definidas por el sistema, estas excepciones se generan explícitamente en el bloque PL / SQL.

Pasos para declarar excepciones definidas por el usuario en la base de datos de Oracle

Podemos definir excepciones definidas por el usuario en la base de datos de Oracle de las siguientes 3 formas:

  • Usando Variable de tipo EXCEPCIÓN

Aquí, podemos declarar una excepción definida por el usuario declarando una variable de EXCEPCIÓN tipo de datos en nuestro código y plantearlo explícitamente en nuestro programa usando la instrucción RAISE.

  • Usando la función PRAGMA EXCEPTION_INIT

Podemos definir un número de error no predefinido con la variable de tipo de datos EXCEPCIÓN

  • Usando el método RAISE_APPLICATION_ERROR

Con este método, podemos declarar una excepción definida por el usuario con nuestro propio número y mensaje de error personalizados.

marioneta vs ansible vs chef

Hasta ahora, es posible que tenga una idea aproximada de las formas en que podemos generar excepciones definidas por el usuario en PL / SQL. Aprenderemos sobre cada uno de los métodos mencionados anteriormente con ejemplos más adelante en este artículo sobre el manejo de excepciones en PL / SQL.

A continuación, en este artículo, procedamos con las demostraciones del manejo de excepciones definido por el usuario.

Demostración de excepciones definidas por el usuario

Continuando en este artículo sobre Manejo de excepciones en PL / SQL, entendamos cómo usar la variable de tipo EXCEPTION.

Usando Variable de tipo EXCEPCIÓN

El proceso de declaración de excepción definida por el usuario se divide en tres partes y estas 3 partes son:

  • Declarar un tipo de datos de excepción variable
  • Plantea la excepción
  • Manejar la excepción

Escribamos un código para demostrar los pasos anteriores en detalle.

DECLARAR var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPCION

En el bloque de declaración anterior, tenemos cuatro variables, entre las cuales las tres primeras son variables de tipo de datos de números normales y la cuarta que es ex_DivZero es la variable de tipo de datos de excepción especial. El cuarto es nuestra excepción definida por el usuario.

DECLARAR var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPCION

La parte de ejecución anterior de este bloque anónimo, entrará en acción solo cuando el divisor sea 0. Si el divisor es cero como en nuestro caso, se generará el error y el control del programa saltará todos los pasos siguientes y buscará un manejador de excepciones coincidente. En el caso de que encuentre cualquier otro, realizará la acción en consecuencia; de lo contrario, terminará el programa o nos mostrará un error definido por el sistema no controlado.

EXCEPCIÓN CUANDO ex_DivZero THEN DBMS_OUTPUT.PUT_LINE ('ERROR, el divisor no puede ser cero')

Este es el controlador de excepciones. Tan pronto como el usuario ingrese el divisor como 0, se le solicitará la cadena de mensaje anterior.

Código final:

DECLARE var_dividend NÚMERO: = 10 var_divisor NÚMERO: = 0 var_result NÚMERO ex-DivZero EXCEPCIÓN COMIENZO SI var_divisor = 0 LUEGO SUBIR ex-DivZero FIN SI Var_result: = var_dividend / var_divisor DBMS_OUTPUT 'RESULTADO' || = 0 LUEGO SUBIR ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Continuando en este artículo sobre el manejo de excepciones en PL / SQL, entendamos cómo usar el método PRAGMA_EXCEPTION_INIT.

Usando la función PRAGMA EXCEPTION_INIT

En el Función PRAGMA EXCEPTION_INIT, un nombre de excepción está asociado con un número de error de Oracle. Este nombre se puede utilizar para diseñar el controlador de excepciones para el error.Para proyectos grandes con muchos errores definidos por el usuario, PRAGMA EXCEPTION_INIT es el método más útil y adecuado.

Sintaxis:

PRAGMA EXCEPTION_INIT (nombre_excepción, -número_error_Oracle)

Ejemplo

DECLARAR deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Alguna operación que causa un error ORA-00060 EXCEPCIÓN CUANDO deadlock_detected ENTONCES NULL - manejar el error END

El PRAGMA EXCEPTION_INIT le dice al compilador que asocie un nombre de excepción con un número de error de Oracle como se mencionó anteriormente. Le permite hacer referencia a cualquier excepción interna por su nombre y escribir un controlador específico para ella. Cuando ve una pila de errores, o una secuencia de mensajes de error, el que está en la parte superior es el que se puede atrapar y manejar.

Continuando en este artículo sobre Manejo de excepciones en PL / SQL, entendamos cómo usar el método RAISE_APPLICATION_ERROR.

Usando el método RAISE_APPLICATION_ERROR

Es un procedimiento que viene incorporado con el software de Oracle. Con este procedimiento podemos asociar un número de error con un mensaje de error personalizado. Combinando tanto el número de error como el mensaje de error personalizado, se puede componer una cadena de error que se parece a las cadenas de error predeterminadas que muestra Oracle cuando se encuentra un error. El procedimiento RAISE_APPLICATION_ERROR se encuentra dentro del paquete DBMS_STANDARD

Sintaxis

raise_application_error (error_number, message [, TRUE])

Ejemplo

/ * Se crea un disparador trg_emp_detail_chk. * / CREAR O REEMPLAZAR TRIGGER trg_emp_detail_chk / * El tiempo de disparo se declara como ANTES DE ACTUALIZAR en la tabla EMPLEADOS. * / Antes de ACTUALIZAR sobre empleados DECLARAR permiso_denegado EXCEPCIÓN COMIENZO / * Inicio de la condición IF verificando el día de la hora del sistema es sábado o domingo o no. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN raise_application_error (-20000, 'No está autorizado para hacer cualquier modificación en los fines de semana !! ') / * El procedimiento raise_application_error se llama con el primer valor de parámetro como -20000 y el segundo parámetro con un texto predeterminado que indica que el usuario no está autorizado a realizar ninguna modificación en los fines de semana. * / END IF END

Con esto llegamos al final de este artículo sobre “Manejo de excepciones en PL / SQL”. Espero que este tema se entienda bien y te ayude. Intente escribir sus propios códigos e incorporar los métodos explicados en este artículo.

Si quieres formarte con profesionales en esta tecnología, ¡puedes optar por la formación estructurada de edureka! Mira esto por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. Este curso lo capacita en los conceptos básicos y las herramientas y técnicas avanzadas para administrar datos y administrar la base de datos MySQL. Incluye aprendizaje práctico sobre conceptos como MySQL Workbench, MySQL Server, modelado de datos, conector MySQL, diseño de bases de datos, línea de comandos MySQL, funciones MySQL, etc. Al final de la capacitación, podrá crear y administrar su propia base de datos MySQL y administrar datos.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este artículo 'Manejo de excepciones en PL / SQL' y nos comunicaremos con usted lo antes posible.