Documentos de Académico
Documentos de Profesional
Documentos de Cultura
/*
##############################################################################
# DISPARADORES (implementacion)
##############################################################################
#
# Descripcion: Ejemplo e implementacion de disparadores (trigger) en Oracle
#
##############################################################################
#
# Autor: fjvillatorod
#
# Revision : 2020
#
##############################################################################
*/
-- NOTAS PREVIAS
-- =================================================================
/*
create or replace trigger MI_TRIGGER
before | after | instead of -- MOMENTO
insert | update | delete -- EVENTO
of CAMPOS -- solo para update
on MI_TABLA
for each row -- NIVEL de fila, se activa una vez por cada registro
| statement -- NIVEL de sentencia, se activa una sola vez
when CONDICION -- opcional
begin
-- sentencias
end MI_TRIGGER;
Datos utiles
>> Valores
:old -- registro antiguo
:new -- nuevo registro
user -- nombre de usuario
>> Predicados condicionales
inserting -- True cuando se esta insertando (:new)
-1-
fjvillatoro
*/
-- DISPARADOR
-- Ver 1.0
-- =================================================================
-- Se crea el disparador basico por cada registro afectado
CREATE OR REPLACE TRIGGER hr.tri_log_employees
BEFORE
INSERT OR UPDATE OR DELETE ON hr.employees_copy
BEGIN
dbms_output.put_line('Disparador basico sobre la tabla hr.employees_copy' );
END tri_log_employees;
-- Ver 1.1
-- =================================================================
-- Se implementacion de predicado condicional
CREATE OR REPLACE TRIGGER hr.tri_log_employees
BEFORE
INSERT OR UPDATE OR DELETE ON hr.employees_copy
BEGIN
IF updating THEN
dbms_output.put_line('Se actualizó un registro en la tabla hr.employees_copy' );
END IF;
END tri_log_employees;
-- Ver 1.2
-- =================================================================
-- Se implementacion de old|new con predicado
CREATE OR REPLACE TRIGGER hr.tri_log_employees
BEFORE
INSERT OR UPDATE OR DELETE ON hr.employees_copy
FOR EACH ROW
BEGIN
IF updating('FIRST_NAME') THEN
dbms_output.put_line('El nombre del empleado '
||:old.employee_id||' cambio de '
||:old.first_name||' a '||:new.first_name||' por '||user);
END IF;
END tri_log_employees;
-- PRUEBAS
-2-
fjvillatoro
-- =================================================================
SELECT *
FROM HR.employees_copy
WHERE employee_id = 115;
;
-- ELIMINACION DE OBJETOS
-- =================================================================
--Eliminar Disparador
DROP TRIGGER hr.tri_log_employees;
--Eliminar tabla
DROP TABLE hr.employees_copy;
-- T A R E A
-- =================================================================
/*
Modifique el disparador realizado en clase para que registre dos eventos (insert/update)
-3-