Triggers en Oracle: Ejemplos Prácticos de Tablas de Respaldo y Disparadores en SQL
Ejercicios de Triggers y Tablas de Auditoría en Oracle SQL
1. Crear una tabla llamada GamasProductosBorradas que sea copia de la tabla GamasProductos pero sin datos. Insertar en la tabla GamasProductos una nueva gama cuyo valor sea 'Borrada'.
CREATE TABLE GAMASPRODUCTOSBORRADAS AS SELECT * FROM GAMASPRODUCTOS;
DELETE FROM GAMASPRODUCTOSBORRADAS;
INSERT INTO GAMASPRODUCTOS VALUES ('Borrada', 'Gamas que han sido borradas', NULL, NULL);
COMMIT;
Disparador para el borrado de gamas
2. Crear un disparador llamado Borrar_gama tal que, antes de borrar una determinada gama de la tabla GamasProductos, actualice los registros de la tabla Productos correspondientes a la gama que se desea borrar para que tengan como gama el valor 'Borrada', y además guarde en la tabla GamasProductosBorradas los datos que hay en GamasProductos.
CREATE OR REPLACE TRIGGER Borrar_gama
BEFORE DELETE ON GAMASPRODUCTOS
FOR EACH ROW
BEGIN
INSERT INTO GAMASPRODUCTOSBORRADAS VALUES (:OLD.gama, :OLD.descripciontexto, :OLD.descripcionhtml, :OLD.imagen);
UPDATE PRODUCTOS SET gama = 'Borrada' WHERE gama = :OLD.gama;
END;
Tabla de cambios en oficinas
3. Crear una tabla llamada CambiosOficinas con campos CodigoOficina, LineaDireccion1, CodigoPostal (de las mismas características que en la tabla Oficinas) y FechaCambio.
CREATE TABLE CambiosOficinas AS SELECT codigooficina, lineadireccion1, codigopostal, SYSTIMESTAMP AS FechaCambio FROM oficinas;
DELETE FROM CambiosOficinas;
Disparador de modificación de dirección
4. Crear un trigger llamado CambioDireccionOficina tal que, antes de modificar el valor de LineaDireccion1 de la tabla Oficinas, guarde en la tabla CambiosOficinas los datos de la oficina antes de la modificación.
CREATE OR REPLACE TRIGGER CambioDireccionOficina
BEFORE UPDATE ON oficinas
FOR EACH ROW
WHEN (OLD.lineadireccion1 <> NEW.lineadireccion1)
BEGIN
INSERT INTO cambiosoficinas VALUES (:OLD.codigooficina, :OLD.lineadireccion1, :OLD.codigopostal, SYSTIMESTAMP);
END;
Desactivación de triggers
6. Desactivar el trigger CambioDireccionOficina para que solo se dispare CambioOficina2 cuando haya modificaciones en la tabla Oficinas.
ALTER TRIGGER cambiodireccionoficina DISABLE;
Notificación de nuevos pedidos
7. Crear un trigger llamado PedidoNuevo para que aparezca en pantalla el mensaje 'Hay pedido(s) nuevo(s)' después de que se produzcan inserciones en la tabla Pedidos.
CREATE OR REPLACE TRIGGER PedidoNuevo
AFTER INSERT ON pedidos
BEGIN
DBMS_OUTPUT.PUT_LINE('Hay pedido(s) nuevo(s)');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END;