106 - Disparador de insercion a nivel de fila (insert trigger for each row) |
Una empresa almacena los datos de sus empleados en una tabla denominada "empleados" y en una tabla "control", el nombre del usuario y la fecha, cada vez que se ingresa un nuevo registro en la tabla "empleados".
1 Elimine las tablas:
drop table empleados; drop table control;
2- Cree las tablas con las siguientes estructuras:
create table empleados( documento char(8), apellido varchar2(30), nombre varchar2(30), seccion varchar2(20) ); create table control( usuario varchar2(30), fecha date );
3- Cree un disparador que se dispare una vez por cada registro ingresado en "empleados"; el trigger debe ingresar en la tabla "control", el nombre del usuario y la fecha en la cual se realizó un "insert" sobre "empleados"
4- Vea qué nos informa el diccionario "user_triggers" respecto del trigger anteriormente creado
5- Ingrese algunos registros en "empleados":
insert into empleados values('22333444','ACOSTA','Ana','Secretaria'); insert into empleados values('22777888','DOMINGUEZ','Daniel','Secretaria'); insert into empleados values('22999000','FUENTES','Federico','Sistemas'); insert into empleados values('22555666','CASEROS','Carlos','Contaduria'); insert into empleados values('23444555','GOMEZ','Gabriela','Sistemas'); insert into empleados values('23666777','JUAREZ','Juan','Contaduria');
6- Verifique que el trigger se disparó 6 veces, una por cada fila afectada en la sentencia "insert" anteriormente ejecutada; consultamos la tabla "control":
select *from control;
Si el trigger hubiese sido creado a nivel de sentencia, no de fila, el "insert" anterior se hubiese activado una sola vez aún cuando se ingresaron 6 registros.
Ver solucióndrop table empleados; drop table control; create table empleados( documento char(8), apellido varchar2(30), nombre varchar2(30), seccion varchar2(20) ); create table control( usuario varchar2(30), fecha date ); create or replace trigger tr_ingresar_empleados before insert on empleados for each row begin insert into Control values(user,sysdate); end tr_ingresar_empleados; / select *from user_triggers where trigger_name ='TR_INGRESAR_EMPLEADOS'; insert into empleados values('22333444','ACOSTA','Ana','Secretaria'); insert into empleados values('22777888','DOMINGUEZ','Daniel','Secretaria'); insert into empleados values('22999000','FUENTES','Federico','Sistemas'); insert into empleados values('22555666','CASEROS','Carlos','Contaduria'); insert into empleados values('23444555','GOMEZ','Gabriela','Sistemas'); insert into empleados values('23666777','JUAREZ','Juan','Contaduria'); select * from control;