Está en la página 1de 14

PL SQL

EXCEPCIONES
Lic Cristian Mercado Quispe
Base de Datos II

Lic. Cristian Mercado Quispe - UPEA


Introducción
En Pl/SQL una excepción es una advertencia o condición
de error que puede ser capturada para asignar un nuevo
comportamiento. Las excepciones tienen su propio bloque
DECLARE
--declaraciones
BEGIN
--ejecución
EXCEPTION
--excepción
END;

Lic. Cristian Mercado Quispe - UPEA


Introducción
 Excepciones asociadas a cursores implícitos:

Excepción Explicación
NO_DATA_FOUND Se produce cuando una sentencia SELECT no
devuelve filas
TOO_MANY_ROWS Dado que cada cursor implícito sólo puede
recuperar una fila, esta excepción detecta la
existencia de más de una fila

Lic. Cristian Mercado Quispe - UPEA


EJEMPLO
DECLARE
NOMBRE EMPLOYEES.FIRST_NAME%TYPE;
BEGIN
SELECT FIRST_NAME INTO NOMBRE FROM
EMPLOYEES;
DBMS_OUTPUT.PUT_LINE(NOMBRE);
END;

Lic. Cristian Mercado Quispe - UPEA


DECLARE
NOMBRE EMPLOYEES.FIRST_NAME%TYPE;
BEGIN
SELECT FIRST_NAME INTO NOMBRE FROM
EMPLOYEES;
DBMS_OUTPUT.PUT_LINE(NOMBRE);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('LA SENTENCIA SQL
DEVUELVE DEMASIADOS REGISTROS');
END;
Lic. Cristian Mercado Quispe - UPEA
El siguiente bloque genera un error para el
empleado 500
DECLARE
NOMBRE EMPLOYEES.FIRST_NAME%TYPE;
IDEMP INT:= &VAR_SUS;
BEGIN
SELECT FIRST_NAME INTO NOMBRE FROM EMPLOYEES
WHERE EMPLOYEE_ID=IDEMP;
DBMS_OUTPUT.PUT_LINE(NOMBRE);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('LA SENTENCIA SQL
DEVUELVE DEMASIADOS REGISTROS'||SQlcode);
END;

Lic. Cristian Mercado Quispe - UPEA


Solución
DECLARE
NOMBRE EMPLOYEES.FIRST_NAME%TYPE;
IDEMP INT:= &VAR_SUS;
BEGIN
SELECT FIRST_NAME INTO NOMBRE FROM EMPLOYEES
WHERE EMPLOYEE_ID=IDEMP;
DBMS_OUTPUT.PUT_LINE(NOMBRE);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('LA SENTENCIA SQL DEVUELVE
DEMASIADOS REGISTROS');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO EXISTE EL EMPLEADO'||IDEMP);
END;

Lic. Cristian Mercado Quispe - UPEA


WHEN OTHERS
 Si no existe un bloque de control adecuado al
tipo de excepción, se ejecutara WHEN
OTHERS, el mismo que debe ser el último
manejador de excepciones.

Lic. Cristian Mercado Quispe - UPEA


DECLARE
NOMBRE EMPLOYEES.FIRST_NAME%TYPE;
IDEMP INT:= &VAR_SUS;
BEGIN
SELECT FIRST_NAME INTO NOMBRE FROM
EMPLOYEES
WHERE EMPLOYEE_ID=IDEMP;
DBMS_OUTPUT.PUT_LINE(NOMBRE);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('error en la ejecución');
END;
Lic. Cristian Mercado Quispe - UPEA
Excepciones predefinidas
Excepción Se Ejecuta cuando.. SQLCODE
ACCESS_INTO_NULL El programa intento asignar valores a los -6530
atributos de un objeto no inicializado
CURSOR_ALREADY_OP El programa intento abrir un cursor que se -6531
EN encontraba abierto
DUP_VAL_ON_INDEX El programa intentó almacenar valores -1
duplicados en una columna Primary Key
INVALID_CURSOR El programa intento realizar una operación -1001
no valida en un cursor
ROWTYPE_MISMATCH Los elementos de asignación tienen tipos de -6540
datos incompatiles
ZERO_DIVIDE El programa intentó efectuar una división -1476
por cero

Lic. Cristian Mercado Quispe - UPEA


Uso de SQLCODE y SQLERRM
SQLCODE devuelve el número de error de
oracle.
SQLERRM devuelve el correspondiente mensaje
de error.

Lic. Cristian Mercado Quispe - UPEA


DECLARE
NOMBRE EMPLOYEES.FIRST_NAME%TYPE;
IDEMP INT:= &VAR_SUS;
BEGIN
SELECT FIRST_NAME INTO NOMBRE FROM
EMPLOYEES
WHERE EMPLOYEE_ID=IDEMP;
DBMS_OUTPUT.PUT_LINE(NOMBRE);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE();
END;
Lic. Cristian Mercado Quispe - UPEA
Uso de SQLCODE y SQLERRM
Se puede pasar un número negativo que
represente un error de oracle y mostrar el
mensaje asociado:
DECLARE
Mensaje VARCHAR2(100);
BEGIN
Mensaje := SQLERRM(-1403);
DBMS_OUTPUT.PUT_LINE(mensaje);
END;
Lic. Cristian Mercado Quispe - UPEA
Ejemplo:
 Crear un bloque anónimo que muestre los
mensajes de los siguientes errores
 ORA-1
 ORA-1722
 ORA-6500
 ORA-1422

Lic. Cristian Mercado Quispe - UPEA

También podría gustarte