La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Triggers(Disparadores)

Presentaciones similares


Presentación del tema: "Triggers(Disparadores)"— Transcripción de la presentación:

1 Triggers(Disparadores)
Base Datos Avanzado II Triggers(Disparadores) ING. RICARDO CARLOS INQUILLA QUISPE

2 Objetivos de la sesión Definir los triggers.
Entender las diferentes modalidades. Aplicar triggers para resolver problemas reales.

3 Temas a Tratar Creación de disparadores. Componentes de un disparador.
Disparadores de BD.

4 Trigger Bloque PL/SQL que se ejecuta automáticamente cuando se realiza un evento (INSERT, UPDATE, DELETE). Almacenado en la BD. No puede ser local. No acepta parámetros

5 Utilidad del Trigger Restricción de integridad. (consultar si hay saldo antes de comprar) Auditoria de información. (almacenar quién modificó ciertos registros: sueldo). Aviso automático a otros módulos PL/SQL para que realicen cierta acción. (inactivar al trabajador, eliminar el permiso a todos los módulos del sistema)

6 Resumen

7 Sintaxis del Trigger CREATE OR REPLACE TRIGGER nombre BEFORE INSERT
ON tabla FOR EACH ROW WHEN (condición) DECLARE .... BEGIN END; OR UPDATE INSERT UPDATE DELETE BEFORE AFTER OF col1, col2, …, colN

8 Tipos de Disparadores Orden INSERT, UPDATE, DELETE Temporización
BEFORE, AFTER Nivel FOR EACH ROW

9 Uso de Identificadores de Correlación :old y :new
Permiten acceder a los datos de la fila procesada en el trigger. ORDEN :old :new INSERT NULL Valores a insertar UPDATE Valores a eliminar DELETE

10 CREATE TABLE producto_sec_gru
Ejercicio 1 Crear 2 tablas temporal y product. CREATE TABLE temporal_sec_gru ( prodid number(6), descrip char(30) ); INSERTAR 3 REGISTROS CREATE TABLE producto_sec_gru ( prodid number(6), descrip char(30));

11 Ejercicio 1 Crear un trigger que se dispare una vez por cada fila insertada. CREATE OR REPLACE TRIGGER t_sec_gru AFTER INSERT ON temporal_sec_gru FOR EACH ROW BEGIN dbms_output.put_line('mensaje repetido'); END;

12 Ejercicio 2 Crear un trigger que se dispare sólo una vez luego de la inserción. CREATE OR REPLACE TRIGGER t_una_vez_sec_gru AFTER INSERT ON temporal_sec_gru BEGIN dbms_output.put_line(‘una sola vez'); END;

13 Ejercicio 2 Probar ambos triggers al insertar más de un registro a la vez en la tabla temporal. INSERT INTO temporal_sec_gru SELECT * FROM producto_sec_gru ;

14 CREATE TABLE productcib
Ejercicio 3 Crear una tabla de auditoría para la tabla product CREATE TABLE productcib ( prodid number(6), descrip char(30)); CREATE TABLE product_auditcib ( prodid number(6), descrip char(30), user_audit varchar2(20) );

15 Crear un trigger que almacene los datos insertados en la tabla product y el nombre del usuario que realizó la inserción. CREATE OR REPLACE TRIGGER t_audit_product_22 AFTER INSERT ON productcib FOR EACH ROW DECLARE vusu varchar2(20); BEGIN select user into vusu from dual; INSERT INTO product_auditcib VALUES (:new.prodid, :new.descrip, vusu); END;

16 Ejercicio 3 Inserte un registro en la tabla product
INSERT INTO PRODUCTcib VALUES (5, 'PROBANDO TRIGGER'); Compruebe que se insertó el registro en la tabla product_audit. SELECT * FROM product_auditcib;

17 Eliminar o Deshabilitar
Eliminar un trigger DROP TRIGGER nombre; ALTER TRIGGER nombre DISABLE; Deshabilitar un trigger ALTER TRIGGER nombre ENABLE; Habilitar un trigger

18 RESUMEN

19 Ejercicio 3 Crear una tabla historial para almacenar las modificaciones a la tabla product. CREATE TABLE historial_cib ( prodid number(6), descrip char(30), fecha date );

20 Ejercicio 3 Crear un trigger que almacene el historial de modificaciones de nombres de productos. CREATE OR REPLACE TRIGGER t_product AFTER UPDATE ON productcib FOR EACH ROW BEGIN INSERT INTO historial_cib VALUES (:old.prodid, :old.descrip, sysdate); END;

21 Ejercicio 3 Actualizar una descripción de la tabla product.
UPDATE productcib SET descrip = 'NUEVA DESCRIPCIÓN' WHERE prodid = 5 ;

22 Ejercicio 3 Comprobar que haya insertado en la tabla historial.
SELECT * FROM historial_cib ;

23 Cláusula WHEN Válida sólo cuando se usa FOR EACH ROW.
Se disparará sólo cuando cumpla la condición. Se puede usar las variables old y new dentro de la condición, pero no se usan los dos puntos (:)

24 Ejercicio 4 Crear un trigger que muestre un mensaje cuando se inserta un empleado con salario mayor a 1000. CREATE OR REPLACE TRIGGER t_emp AFTER INSERT ON emp FOR EACH ROW WHEN (new.sal>1000) BEGIN dbms_output.put_line('Salario superior'); END;

25 Creamos la tabla Empleado

26 Ejercicio 4 Insertar un empleado con salario mayor a 1000.
INSERT INTO emp (empno, sal) VALUES (9876, 1001); Insertar un empleado con salario no mayor a 1000. INSERT INTO emp (empno, sal) VALUES (9877, 1000);

27 RESUMEN

28 Predicados en Triggers
COMPORTAMIENTO INSERTING TRUE si fue un INSERT. FALSE caso contrario. UPDATING TRUE si fue un UPDATE. DELETING TRUE si fue un DELETE.

29 Ejercicio 5 Modificar la tabla historial para aumentar un campo ORDEN.
En este campo se almacenará el tipo de orden DML que genera el registro. ALTER TABLE historial_cib ADD orden varchar2(10);

30 Ejercicio 5 Modificar el trigger t_product para que almacene el historial de inserciones y eliminaciones, además del de modificaciones de productos.

31 Ejercicio 5 CREATE OR REPLACE TRIGGER t_product AFTER INSERT OR UPDATE OR DELETE ON productcib FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO historial_cib VALUES(:new.prodid, :new.descrip, sysdate, 'INSERT'); ELSIF UPDATING THEN INSERT INTO historial_cib VALUES(:old.prodid, :old.descrip, sysdate, 'UPDATE'); ELSIF DELETING THEN INSERT INTO historial_cib VALUES(:old.prodid, :old.descrip, sysdate, 'DELETE'); END IF; END;

32 Probamos el Triggers INSERT INTO PRODUCTcib VALUES (6, 'PROBANDO TRIGGER 2'); UPDATE productcib SET descrip = 'NUEVA DESCRIPCIÓN 2' WHERE prodid = 5 ; DELETE FROM productcib WHERE prodid = 5 ;

33 CONSULTAR DATOS TRIGGER

34 Ejercicios Cree un trigger que valide que cualquier actualización del salario de un empleado el monto no debe pasar de nuevos soles. En caso se esté actualizando el salario de un empleado con un monto mayor, el trigger debe asignar el monto como tope. Cree un trigger que capture información de los empleados a los cuales se les está modificando el salario. Solamente para los de contabilidad (ACCOUNTING).

35 Ejercicios Simule una eliminación en cascada de tal forma que cuando se elimine una orden se eliminen los items de dicha orden. Cree tablas de auditoria(una sola tabla) para las modificaciones en las tablas emp, ord, item, deberá almacenar la fecha , pc,usuario ,valor antiguo(ord) y nuevo(ord) y el nombre de la tabla en la cual se realizo el cambio

36 MUCHAS GRACIAS ,ALGUNA PREGUNTA?
FIN DE CLASE MUCHAS GRACIAS ,ALGUNA PREGUNTA?

37 introducción

38 PARTES BÁSICAS


Descargar ppt "Triggers(Disparadores)"

Presentaciones similares


Anuncios Google