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:
|
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.