Vous êtes sur la page 1sur 3

Excepciones

Una excepcin es un error ocurrido durante la ejecucin de un programa PL/SQL.


Las rutinas de tratamiento de excepciones son los mtodos a travs el cual el
programa reacciona a los errores de ejecucin (excepciones).
Cuando un error ocurre una excepcin se dispara, ya sea que est o no controlada en
el cdigo. Si es controlada en el cdigo se ejecutarn las sentencias bajo la misma,
sino se detendr la ejecucin.
Cuando se produce un error, se genera una excepcin. Cuando esto sucede, el control
pasa al gestor de excepciones, que es una seccin independiente del programa. Esto
permite separar la gestin de errores del resto de programa, lo que hace que sea ms
fcil de entender la lgica de ste, y tambin asegura que todos los errores sern
interceptados.
Los errores de ejecucin incluyen errores SQL y errores procedimentales.

Declaracin de excepciones

Las excepciones se declaran en la seccin declarativa de un bloque, se generan en la


seccin ejecutable y se tratan en la seccin de excepciones. Existen dos clases de
excepciones: definidas por el usuario y predefinidas.

Excepciones definidas por el usuario:

Una excepcin definida por el usuario es un error cuya definicin se realiza dentro del
programa. El error en cuestin no tiene que ser necesariamente un error Oracle, sino
que podra tratarse de un error relativo a los datos.
Se declaran en la seccin declarativa de un bloque PL/SQL y tienen asociada el tipo
EXCEPTION.

DISPARADORES
Un disparador (o trigger) es un procedimiento almacenado asociado a una tabla que se ejecuta
al realizar una operacin bsica (INSERT, un DELETE o un UPDATE) sobre sta. La
operacin bsica que despierta al trigger es conocida como sentencia disparadora. La
ejecucin del disparador puede ser antes o despus de llevar a cabo la sentencia disparadora.
Es posible especificar condiciones adicionales para la ejecucin del disparador (restrictores).
Dado que una sentencia disparadora puede afectar una o ms filas de una tabla, es necesario
especificar si se quiere que el disparador se ejecute para cada una de las filas afectadas o para
el bloque en general.
Diseo de disparadores
Los disparadores pueden ser utilizados para cumplir con alguna de las siguientes tareas:
Evitar la ejecucin de transacciones invlidas
Garantizar el cumplimiento de restricciones de integridad
Garantizar el cumplimiento de reglas del negocio
Generar, automticamente, valores de columnas derivadas

Transacciones
Una transaccin se define como un conjunto de operaciones sobre la base de datos.
En Oracle si se ejecuta un conjunto de operaciones y una de ellas falla se aborta la transaccin
entera. La transaccin finaliza cuando se ejecuta un comando de control de transacciones
como rollback o commit work (se puede abreviar poniendo simplemente commit).
Comandos utilizados para el control de transacciones
Commit
Este comando da por concluida la transaccin actual y hace definitivos los cambios realizados
liberando las filas bloqueadas. Slo despus de que se ejecute commit tendremos acceso a los
datos modificados.
Rollback
Este comando da por concluida la transaccin actual y deshace los cambios que se pudiesen
haber producido en la misma, liberando las filas bloqueadas. Se utiliza especialmente cuando
no se puede concluir una transaccin porque se han levantado excepciones.
Savepoint
Se utiliza para poner marcas o puntos de salvaguarda al procesar transacciones. Se utiliza
junto con rollback permitiendo deshacer cambios hasta los savepoint.
El nmero de savepoint esta limitado a 5 por sesin pero lo podemos modificar con la siguiente
sentencia:

savepoint numero;
Rollback implicito
Este comando se ejecuta cuando un programa almacenado (procedimiento o funcin) falla y no
se controla la excepcin que produjo el fallo. Pero si en el programa tenemos un commit estos
cambios no sern deshechos.
Rollback to
Deshace el trabajo realizado despus del punto indicado. Pero no se confirma el trabajo hecho
hasta el savepoint. La transaccin no finaliza hasta que se ejecuta un comando de control de
transacciones o hasta que finaliza la sesin.

Ejemplos
--------------------Excepcin-------------DECLARE
VALOR NUMBER(4);-- DEPARTMENTS.DEPARTMENT_ID%TYPE;
BEGIN
-- Aade una fila a la tabla dept
INSERT INTO DEPARTMENTS
(DEPARTMENT_ID,DEPARTMENT_NAME,MANAGER_ID,LOCATION_ID)
VALUES (271,'XELA',NULL, 1700);
COMMIT;
-- ZONA DE TRATAMIENTO DE EXCEPCIONES
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('ERROR EN EL SELECT .. INTO');
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('DATO NO INSERTADO!!!!');
END;
------------------Trigger ---------------------CREATE OR REPLACE TRIGGER ActualizarEmpleado
after UPDATE OF FIRST_NAME ON EMPLOYEES
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('Se ha actualizado correctamente el nombre del
empleado.');
END;
-----------------Transaccin --------------------------BEGIN
INSERT INTO REGIONS
(REGION_ID, REGION_NAME)
VALUES
(5, 'CentroAmerica');
UPDATE EMPLOYEES set FIRST_NAME ='Bill', LAST_NAME='Gates' where
employee_id = 2015;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en la transaccion:'||SQLERRM);
dbms_output.put_line('Se deshacen las modificaciones');
ROLLBACK;
END;

Vous aimerez peut-être aussi