jueves, 2 de junio de 2011

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