3. DEFINICIÓN
• Es una clase especial de procedimiento almacenado que se ejecuta automáticamente
cuando se produce un evento en el servidor de bases de datos. Son objetos que se
asocian con tablas y se almacenan en la base de datos.
4. • . Los eventos que hacen que se ejecute un trigger son las operaciones de inserción
(INSERT), borrado (DELETE) o actualización (UPDATE), ya que modifican los datos de una
tabla.
5. SINTAXIS
CREATE OR REPLACE TRIGGER traslado
AFTER UPDATE OF Loc
ON DEPART FOR EACH ROW
DECLARE
vdep number;
BEGIN
SELECT dept_no INTO vdep FROM depart;
UPDATE emple
SET SALARIO=salario+salario*20/100
WHERE vdep=dept_no;
END;
6. Administración de Activadores (Creación, Modificación y
Eliminación)
Creación de Activadores
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ;
] > }
7. Actualizar trigger
create trigger DIS_libros_actualizar
on libros
for update
as
raiserror('Los datos de la tabla
"libros" no pueden modificarse', 10,
1)
rollback transaction
8. Eliminar trigger
CREATE TRIGGER TR_CUSTOMER_DEL ON customer
FOR DELETE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (
SELECT *
FROM deleted
WHERE name = 'Peter'
)
BEGIN
ROLLBACK;
THROW 50001, 'Cannot delete Peter', 1;
END
END;
9. Ejemplos
---01 crear un activador
ALTER trigger tr_actualizar_precio_producto
on tbproducto
instead of update
as
declare @cod_pro char(4)
select @cod_pro=codproducto from inserted ---
capturando el codigo que se busca
declare @pre_pro decimal(9,2)
select @pre_pro=preciounitario from inserted ---
capturando el precio que se busca
DECLARE @CANTIDAD INT
SELECT @CANTIDAD=STOCK FROM INSERTED
update tbproducto set
preciounitario=(preciounitario+@pre_pro)/2,Stock=Stoc
k+@CANTIDAD
where codproducto=@cod_pro
print 'EL PRECIO Y STOCK ESTA ACTUALIZADO'
go
UPDATE TBPRODUCTO SET PRECIOUNITARIO=125.00,Stock=40
WHERE CodProducto='204'---PARA ACTUALIZAR PRECIO DEL
PRODUCTO
SELECT * FROM TbProducto WHERE CodProducto='204'----
PARA COMPROBRAR
10. CREAR UN DISPARADOR PARA ELIMINAR TABLAS
CREATE TRIGGER tr_Gestionar_Eliminacion_Tablas
ON DATABASE
FOR DROP_TABLE,ALTER_TABLE
AS
BEGIN
RAISERROR ('NO TIENE AUTORIZACIÓN PARA ELIMINAR
O MODIFICAR TABLAS',16,1)
ROLLBACK TRANSACTION--deshacer la transsacion
END
--COMPROBACION---------------------------------------
---------------------
CREATE TABLE Prueba (id INT IDENTITY (1,1) PRIMARY
KEY,
nombre VARCHAR (80)NOT NULL)
GO