You are on page 1of 3

Tratamiento De Errores

Tipos de Errores:
De Compilación:
Quien se encarga de informar es el copilador PL/SQL y quien se encarga de corregir es el
programador.
De Ejecución:
Quien se encarga de informar es el motor de ejecución PL/SQL, donde las excepciones son
generadas e interceptadas por las rutinas de tratamiento de excepciones.
Excepciones
Tenemos dos tipos de excepciones definidas por el usuario y predefinidas.
Esquema General:
EXCEPTION
WHEN nombre_excepción THEN
secuencia_de_instrucciones;
WHEN nombre_excepción THEN
secuencia_de_instrucciones;
[ WHEN OTHERS THEN
secuencia_de_instrucciones; ]
END;

La Sentencia Raise

La sentencia RAISE permite lanzar una excepción en forma explícita. Es posible utilizar esta
sentencia en cualquier lugar que se encuentre dentro del alcance de la excepción.

DECLARE
-- Declaramos una excepcion identificada por VALOR_NEGATIVO
VALOR_NEGATIVO EXCEPTION;
valor NUMBER;
BEGIN
-- Ejecucion
valor := -1;
IF valor < 0 THEN
RAISE VALOR_NEGATIVO;
END IF;

EXCEPTION
-- Excepcion
WHEN VALOR_NEGATIVO THEN
dbms_output.put_line('El valor no puede ser negativo');
END;
Excepciones Definidas por el Usuario
Una excepción definida por el usuario es definida por el programador.
Ejemplo
DECLARE
e_MuhcosEstudiantes EXCEPTION;
e_MuchosEstudiantes, es un identificador que estará visible antes o al final de ese bloque.
Excepciones Predefinida
Hay diversas excepciones que corresponden con los errores de Oracle más comunes son:
Invalid_Cursor
Ocurre cuando se hace referencia a un cursor que esta cerrado.
No_Data_Found
Ocurre cuando una sentencia SELECT no retorna ninguna fila.
DECLARE
TYPE t_NumberTableType IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
v_NumberTable t_NumberTableType;
v_TempVar NUMBER;
BEGIN
v_TempVar := v_NumberTable(1);
END;
Value_Error
Ocurre cuando hay conflicto de tipos de datos.
DECLARE
v_TempVar VARCHAR2(3);
BEGIN
v_TempVar := 'ABCD';
END;
Rowtype_Mismatch
Ese tipo de excepción es levantada cuando los tipos de variable de cursor PL/SQL no
corresponden.
DECLARE
e_MuchosEstudiantes EXCEPTION;
v_EstudiantesActual NUMBER(3);
v_MaxEstudiantes NUMBER(3);
BEGIN
SELECT current_students, max_students
INTO v_EstudiantesActual, v_MaxEstudiantes
FROM Clases
WHERE departamento = 'HIS' AND curso = 101;
IF v_ActualEstudiantes > v_MaxEstudiantes THEN
RAISE e_MuchosEstudiantes;
END IF;
END;
Dup_Val_On_Index
Una unica restriccion violada.
BEGIN
INSERT INTO students (id, first_name, last_name)
VALUES (20000, 'John', 'Smith');
INSERT INTO students (id, first_name, last_name)
VALUES (20000, 'Susan', 'Ryan');
END;DUP_VAL_ON_INDEX:

Timeout_On_Resource
Se excedió el tiempo máximo en espera por un recurso.
Not_Logged_On
El programa efectuó una llamada a Oracle sin estar conectado.
Login_Denied
El login o la contraseña utilizados para entrar en Oracle son inválidos.
Too_Many_Rows
Una sentencia SELECT INTO devolvió más de un registro.
Zero_Divide
Se ha ejecutado una división donde el divisor valía cero.
Storage_Error
Si no se dispone de más memoria o la memoria esta dañada.
Program_Error
Ocurrió un problema interno al ejecutar el código PL/SQL.
Access_Into_Null
Se intentó asignar un valor a los atributos de un objeto no inicializado.
Collection_Is_Null
Se intentó asignar un valor a una tabla anidada aún no inicializada.
Self_Is_Null
El parámetro SELF (el primero que es pasado a un método MEMBER) es nulo.
Others
Cualquier otro tipo de error que pueda producirse. Cuando se utiliza la excepción OTHERS,
cualquier excepción que no se haya tratado anteriormente se procesará según la secuencia de
instrucciones incluida dentro de la sección OTHERS. OTHERS debe ser la última excepción
tratada dentro de la sección dedicada al tratamiento de excepciones.

You might also like