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