Download trigger - WordPress.com

Document related concepts
no text concepts found
Transcript
TRIGGER
Un trigger (o disparador) en una Base de datos , es un procedimiento que se
ejecuta cuando se cumple una condición establecida al realizar una operación.
Dependiendo de la base de datos, los triggers pueden ser de inserción (INSERT),
actualización (UPDATE) o borrado (DELETE). Algunas bases de datos pueden
ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros
objetos.
CARACTERISTICAS
Puesto que los trigger se establecen sobre objetos de persistencia, cada objeto de
persistencia que soporte la gestión de triggers tiene asociado un tipo de trigger.
Cada trigger implementa una interfaz concreta, así pues para gestionar un trigger
sobre un objeto que implemente la interfaz Device dispone de una interfaz
DeviceTrigger la cual define los siguientes métodos.
• public void run(Device device);
• public void error(Device device);
Como puede observar los dos métodos proporcionan un objeto, este objeto es el
objeto sobre el cual se produjo el evento.
MODO DE EMPLEO
Son usados para mejorar la administración de la Base de datos, sin necesidad de
contar con que el usuario ejecute la sentencia de SQL.
Además, pueden generar valores de columnas, previene errores de datos,
sincroniza tablas, modifica valores de una vista, etc.
Permite implementar programas basados en paradigma lógico (sistemas expertos,
deducción).
VENTAJAS Y DESVENTAJAS
Vetajas:
-Ofrece un mayor control sobre la B.D.
-Fuerzan restricciones dinámicas de integridad de datos y de integridad
referencial.
-Respuesta instantánea ante eventos auditados.
-Aseguran que las operaciones relacionadas de realizan juntas de forma implícita.
Desventajas:
-Un Trigger nunca se llama directamente.
-Los triggers no se desarrollan pensando en unsolo registro, los mismos deben
funcionar enconjunto con los datos ya que se disparan por operación y no por
registro.
-Por funcionalidad, no hay que poner en uno sololas funciones de
INSERT,UPDATE y DELETE.
-Utilizar moderadamente los triggers.
-No se pueden utilizar en tablas temporales.
EJEMPLOS
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('Purchasing.LowCredit','TR') IS NOT NULL
DROP TRIGGER Purchasing.LowCredit;
GO
-- This trigger prevents a row from being inserted in the
Purchasing.PurchaseOrderHeader table
-- when the credit rating of the specified vendor is set to 5 (below
average).
CREATE TRIGGER Purchasing.LowCredit ON Purchasing.PurchaseOrderHeader
AFTER INSERT
AS
DECLARE @creditrating tinyint, @vendorid int;
IF EXISTS (SELECT *
FROM Purchasing.PurchaseOrderHeader p
JOIN inserted AS i
ON p.PurchaseOrderID = i.PurchaseOrderID
JOIN Purchasing.Vendor AS v
ON v.BusinessEntityID = p.VendorID
WHERE v.CreditRating = 5
)
Ejemplo 2
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT * FROM sys.triggers
WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;
GO
CREATE TRIGGER safety
ON DATABASE
FOR DROP_SYNONYM
AS
RAISERROR ('You must disable Trigger "safety" to drop synonyms!',10,
1)
ROLLBACK
GO
DROP TRIGGER safety
ON DATABASE;GO