Create or replace trigger miTrigger
after delete or insert or update of numempleado on propiedad
for each row
declare
vOldOfiEmpleado char(4);
vNewOfiEmpleado char(4);
begin
if updating then
select numoficina into vOldOfiEmpleado
from empleado
where numempleado = :old.numempleado;
select numoficina into vNewOfiEmpleado
from empleado
where numempleado = :new.numempleado;
if vOldOfiEmpleado <> vNewOfiEmpleado then
update oficina
set totPropiedad = totPropiedad - 1
where numOficina = vOldOfiEmpleado;
update oficina
set totPropiedad = totPropiedad + 1
where numOficina = vNewofiEmpleado;
end if;
else
if deleting then
select numoficina into vOldOfiEmpleado
from empleado
where numempleado = :old.numempleado;
update oficina
set totPropiedad = totPropiedad - 1
where numOficina = vOldOfiEmpleado;
else
select numoficina into vNewOfiEmpleado
from empleado
where numempleado = :new.numempleado;
update oficina
set totPropiedad = totPropiedad + 1
where numOficina = vNewofiEmpleado;
end if;
end if;
end;
Chequeamos los
select e.numempleado, p.numpropiedad
from empleado e, propiedad p
where numoficina = 'B005'
and e.numempleado = p.numempleado
Buscamos algun empleado que no tenga propiedades
Vamos a cambiar la asignacion de la propiedad "PG16" que la tiene el
empleado "SL22" de la oficina "B005" con 5 propiedades y la asignamos al empleado "SG37" de la oficina "B006" que no
tiene propiedades.
Hacemos el siguiente update
update propiedad
set numempleado = 'SG37'
where numpropiedad = 'PG16';
Eliminando la propiedad "PL94" de la oficina "B005" que le quedan 4 propiedades
delete from propiedad
where numpropiedad = 'PL94'
Ahora insertamos una nueva propiedad al empleado "SG37" de la Oficina "B006"
insert into PROPIEDAD values('P007','Nueva','Aberdeem','AB7 5SU','Casa','6','650','C046','SG37');
Finalmente la Oficina "B006" deberia quedar con DOS (2) Propiedades
No hay comentarios.:
Publicar un comentario