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ón
drop 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;