Oracle/PLSQL: excepción del sistema de nombres

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: excepción del sistema de nombres

Este tutorial de Oracle explica cómo usar Excepción del sistema de nombres En Oracle/PLSQL con sintaxis y ejemplos.

¿Qué son las excepciones del sistema de nombres en Oracle?

Las excepciones del sistema de nombres son excepciones nombradas por PL/SQL. Se nombran en el paquete STANDARD de PL/SQL y no necesitan ser definidos por el programador.

Oracle tiene un conjunto estándar de excepciones, que se han denominado de la siguiente manera:

Nombre de excepción de Oracle bicho del oráculo explique
DUP_VAL_ON_INDEX ORA-00001 Intentó ejecutar una declaración INSERT o UPDATE que creó valores duplicados en un campo restringido por un índice único.
TIMEOUT_ON_RESOURCE ORA-00051 Está esperando un recurso, pero se agotó el tiempo de espera.
TRANSACTION_BACKED_OUT ORA-00061 La parte remota de la transacción se revirtió.
INVALID_CURSOR ORA-01001 Intentó hacer referencia a un cursor que aún no existe. Esto puede deberse a que ejecutó un cursor FETCH o un cursor CLOSE antes que el cursor OPEN.
NOT_LOGGED_ON ORA-01012 Intentó realizar una llamada a Oracle antes de iniciar sesión.
LOGIN_DENIED ORA-01017 Intentó iniciar sesión en Oracle con una combinación de nombre de usuario/contraseña no válida.
datos no encontrados ORA-01403 Ha intentado uno de los siguientes:

  1. Ejecutó una instrucción SELECT INTO, pero no se devolvieron filas.
  2. Está haciendo referencia a una fila no inicializada en la tabla.
  3. Lees el final del archivo usando el paquete UTL_FILE.
TOO_MANY_ROWS ORA-01422 Intentó ejecutar una instrucción SELECT INTO y se devolvieron varias filas.
ZERO_DIVIDE ORA-01476 Estás tratando de dividir un número por cero.
número invalido ORA-01722 Intentó ejecutar una instrucción SQL que intentó convertir una cadena en un número, pero no funcionó.
ALMACENAMIENTO_ERROR ORA-06500 No tiene memoria o la memoria está dañada.
PROGRAMA_ERROR ORA-06501 Este es un mensaje genérico “Comuníquese con el soporte de Oracle” debido a un problema interno.
VALOR_ERROR ORA-06502 Intentó realizar una operación, pero se produjo un error con una conversión, un truncamiento o una restricción no válida para datos numéricos o de caracteres.
CURSOR_ALREADY_OPEN ORA-06511 Intentó abrir un cursor que ya estaba abierto.

sintaxis

Veremos la sintaxis para nombrar excepciones del sistema en procedimientos y funciones.

gramática procesal

La sintaxis para nombrar excepciones del sistema en un procedimiento es:

CREATE [OR REPLACE] PROCEDURE procedure_name
   [ (parameter [,parameter]) ]
IS
   [declaration_section]

BEGIN
   executable_section

EXCEPTION
   WHEN exception_name1 THEN
      [statements]

   WHEN exception_name2 THEN
      [statements]

   WHEN exception_name_n THEN
      [statements]

   WHEN OTHERS THEN
      [statements]

END [procedure_name];

sintaxis de la función

La sintaxis para nombrar excepciones del sistema en una función es:

CREATE [OR REPLACE] FUNCTION function_name
   [ (parameter [,parameter]) ]
   RETURN return_datatype
IS | AS
   [declaration_section]

BEGIN
   executable_section

EXCEPTION
   WHEN exception_name1 THEN
      [statements]

   WHEN exception_name2 THEN
      [statements]

   WHEN exception_name_n THEN
      [statements]

   WHEN OTHERS THEN
      [statements]

END [function_name];

ejemplo

El siguiente es un ejemplo de un procedimiento que utiliza excepciones del sistema de nombres:

CREATE OR REPLACE PROCEDURE add_new_supplier
   (supplier_id_in IN NUMBER, supplier_name_in IN VARCHAR2)
IS

BEGIN
   INSERT INTO suppliers (supplier_id, supplier_name )
   VALUES ( supplier_id_in, supplier_name_in );

EXCEPTION
   WHEN DUP_VAL_ON_INDEX THEN
      raise_application_error (-20001,'You have tried to insert a duplicate supplier_id.');

   WHEN OTHERS THEN
      raise_application_error (-20002,'An error has occurred inserting a supplier.');

END;

En este ejemplo, detectamos una excepción del sistema de nombres denominada DUP_VAL_ON_INDEX. También usamos la cláusula WHEN OTHERS para capturar todas las excepciones restantes.

(Visited 5 times, 1 visits today)