lunes, 10 de diciembre de 2007

Triggers



¿Qué son?

Los triggers, disparadores o desencadenadores, son un tipo de procedimientos almacenados los cuales se ejecutan al momento de que se realice un evento (insert, delete, update) sobre la tabla que se indique.

¿Cómo crearlos?



Sintaxis para crear un trigger:



create trigger "nombre del trigger"
on "nombre de la tabla"
for "nombre del evento"
as
"sentencias"



Nota: Para modificar un trigger se utiliza la palabra "alter", en lugar del "create".



¿Cómo eliminarlos?



Sintaxis para eliminar un trigger:


drop trigger "nombre del trigger"




Ejemplos



Por ejemplo, se cuenta con dos tablas:


Se desea almacenar el total de productos con que se cuenta; es decir, cada vez que se inserte un producto se debe actualizar el total de productos. Es aquí donde entran los triggers, cada vez que se inserte un producto se debe actualizar la tabla totales, en su campo total_prod.


create trigger DisInsProductos
on productos
for insert
as
if(select count(*) from totales)=0
insert into totales values(1,0)
else
update totales set total_prod=total_prod+1


En el ejemplo primero se checa si ya se inserto un registro en la tabla totales, sino se realizo se inserta, en caso contrario, nada mas se actualiza… sencillo no creenJ.

Ahora otro ejemplo:


En este caso, cada vez que se ingrese un autor se debe incrementar el total_Autores en la tabla estadísticas, este proceso es igual para los libros. Además cada vez que se ingrese un libro se debe ir calculando el precio promedio de todos los libros. El script para este ejemplo:


--Trigger para Autores-Insertar


create trigger Dis_Estadisticas_Act
on Autores
for insert
as
if
(select count(*) from estadísticas)=0
insert into estadísticas values (1,0,0)
else
update estadísticas set total_Autores=Total_Autores + 1




--Trigger para el precio




create trigger Dis_Libros_Act
on Libros
for insert
as
--En este punto se declara una variable
declare @precio float
--Se guarda el precio que se acaba de insertar en la variable.
--La tabla inserted se crea con los datos insertados.
select @precio= precio from inserted
update Estadísticas set precio_promedio = (precio_promedio+@precio)/total_libros



Ahora, cada vez que se elimine un autor, el total de autores de la tabla estadísticas debe disminuir.




--Trigger para Autores-Eliminar

alter trigger Dis_Estadísticas_Elim
on Autores
for delete
as
update estadísticas set total_Autores=total_Autores-1

No hay comentarios: