TRIGGERS O DISPARADORES

LisbethOcaaBueno 3,998 views 16 slides May 19, 2018
Slide 1
Slide 1 of 16
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16

About This Presentation

Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la base de datos.


Slide Content

TRIGGERS

DEFINICIÓN: Un desencadenador (o Trigger ) es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos. Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la base de datos. Su nombre se deriva por el comportamiento que presentan en su funcionamiento, ya que se ejecutan cuando sucede algún evento sobre las tablas a las que se encuentra asociado. 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. La utilidad principal de un trigger es mejorar la administración de la base de datos, ya que no requieren que un usuario los ejecute. Los triggers pueden prevenir errores en los datos, modificar valores de una vista, sincronizar tablas, entre otros.

SQL Server permite crear varios desencadenadores para una instrucción específica. Según el tipo de evento que los desencadena se clasifican en: Desencadenadores DML Desencadenadores DDL Desencadenadores LOGON Los desencadenadores DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Los desencadenadores DDL se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact -SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. Los desencadenadores logon se activan en respuesta al evento LOGON que se genera cuando se establece la sesión de un usuario.

COMPONENTES: La estructura básica de un trigger es: Llamada de activación: Es la sentencia que permite "disparar" el código a ejecutar. Restricción: Es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad. Acción a ejecutar: Es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales. TIPOS: Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar: Row Triggers (o Disparadores de fila): Son aquellas que se ejecutaran cada vez que se llama al disparador desde la tabla asociada al trigger . Statement Triggers (o Disparadores de secuencia): Son aquellos que sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única.

SINTAXIS: Esta instrucción nos permite definir un trigger : CREATE [ OR ALTER ] 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 [ ; ] > } < dml_trigger_option > ::= [ ENCRYPTION ] [ EXECUTE AS Clause ] < method_specifier > ::= assembly_name.class_name.method_name

ADMINISTRACIÓN DE ACTIVADORES (Creación, Modificación y Eliminación): Creación de un Activador: CREATE TRIGGER [ NombreEsquema .] NombreTrigger ON {tabla | vista } [,...n] ] {FOR|AFTER|INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]} AS sentencia_sql [;] [,...n ] Modificación de un Activador: Permite modificar la definición del desencadenador, no permite cambiar su nombre, para cambiar el nombre de un desencadenador hay que eliminarlo (DROP TRIGGER) y volver a crearlo (CREATE TRIGGER). ALTER TRIGGER [ NombreEsquema .] NombreTrigger ON { tabla|vista } {FOR|AFTER|INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]} [WITH APPEND] AS sentencia_sql [;] [,...n ]

Ejemplo: ALTER TRIGGER ActualizaVentasEmpleados ON pedidos FOR INSERT AS UPDATE empleados SET ventas= ventas+inserted.importe FROM empleados, inserted WHERE numemp = inserted.rep AND inserted.importe IS NOT NULL; . Eliminación de un Trigger : Para eliminar un desencadenador tenemos la instrucción DROP TRIGGER elimina la definición del desencadenador. DROP TRIGGER NombreEsquema.NombreTrigger [,...n] [;] Ejemplo: DROP TRIGGER ActualizaVentasEmpleados

EJEMPLOS: Trigger para insertar un pedido de un producto cuando la cantidad de éste, en nuestro almacén, sea inferior a un valor dado. CREATE TRIGGER TR_ARTICULO ON ARTICULOS AFTER UPDATE AS BEGIN INSERT INTO HCO_ARTICULO (IDARTICULO, STOCK, FECHA) SELECT ID_ARTICULO, STOCK, GETDATE() FROM INSERTED END INSERT INTO ARTICULOS VALUES (1, 'MEMORIA', 12, '12/03/2014') SELECT * FROM ARTICULOS UPDATE ARTICULOS SET STOCK = STOCK - 20 WHERE ID_ARTICULO = 1 SELECT * FROM HCO_ARTICULO

Cree un activador que emita un error cuando se produzca una actualización que daría como resultado un aumento de salario mayor que el diez por ciento del salario actual. CREATE TRIGGER RAISE_LIMIT AFTER UPDATE OF SALARY ON EMPLOYEE REFERENCING NEW AS N OLD AS O FOR EACH ROW WHEN (N.SALARY > 1.1 * O.SALARY) SIGNAL SQLSTATE '75000' SET MESSAGE_TEXT =' Salary increase >10%'

RESUMEN: Un " trigger " (disparador o desencadenador) es un tipo de procedimiento almacenado que se ejecuta cuando se intenta modificar los datos de una tabla (o vista). Un trigger se define para una tabla (o vista) específica, se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas. Si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla en la que se definió un disparador para alguna de estas acciones (inserción, actualización y eliminación), el disparador se ejecuta (se dispara) en forma automática. Un trigger se asocia a un evento (inserción, actualización o borrado) sobre una tabla. La diferencia con los procedimientos almacenados del sistema es que los triggers : No pueden ser invocados directamente; al intentar modificar los datos de una tabla para la que se ha definido un disparador, el disparador se ejecuta automáticamente. No reciben y retornan parámetros. Son apropiados para mantener la integridad de los datos, no para obtener resultados de consultas.

Los disparadores, a diferencia de las restricciones " check ", pueden hacer referencia a campos de otras tablas. Por ejemplo, puede crearse un trigger de inserción en la tabla "ventas" que compruebe el campo "stock" de un artículo en la tabla " articulos "; el disparador controlaría que, cuando el valor de "stock" sea menor a la cantidad que se intenta vender, la inserción del nuevo registro en "ventas" no se realice. Los disparadores se ejecutan DESPUES de la ejecución de una instrucción " insert ", " update " o " delete " en la tabla en la que fueron definidos. Las restricciones se comprueban ANTES de la ejecución de una instrucción " insert ", " update " o " delete ". Por lo tanto, las restricciones se comprueban primero, si se infringe alguna restricción, el desencadenador no llega a ejecutarse. Los triggers se crean con la instrucción " create trigger ". Esta instrucción especifica la tabla en la que se define el disparador, los eventos para los que se ejecuta y las instrucciones que contiene.

Sintaxis básica: create triggre NOMBREDISPARADOR on NOMBRETABLA for EVENTO- insert , update o delete } as SENTENCIAS Análisis la sintaxis: " create trigger " junto al nombre del disparador. " on " seguido del nombre de la tabla o vista para la cual se establece el trigger . Luego de " for ", se indica la acción (evento, el tipo de modificación) sobre la tabla o vista que activará el trigger . Puede ser " insert ", " update " o " delete ". Debe colocarse al menos UNA acción, si se coloca más de una, deben separarse con comas. Luego de "as" viene el cuerpo del trigger , se especifican las condiciones y acciones del disparador; es decir, las condiciones que determinan cuando un intento de inserción, actualización o borrado provoca las acciones que el trigger realizará.

RECOMENDACIONES: " create trigger " debe ser la primera sentencia de un bloque y sólo se puede aplicar a una tabla. Un disparador se crea solamente en la base de datos actual, pero puede hacer referencia a objetos de otra base de datos. Las siguientes instrucciones no están permitidas en un desencadenador: create database , alter database , drop database , load database , restore database , load log, reconfigure, restore log, disk init , disk resize . Se pueden crear varios triggers para cada evento, es decir, para cada tipo de modificación (inserción, actualización o borrado) para una misma tabla. Por ejemplo, se puede crear un " insert trigger " para una tabla que ya tiene otro " insert trigger ".

CONCLUCIONES: Los triggers o disparadores son objetos de la base de datos que ejecutan acciones cuando se producen ciertos eventos (tanto DML como DDL) (inserciones, modificaciones, borrados, creación de tablas, etc ). Los Triggers son usados para mejorar la administración de la Base de datos, sin necesidad de 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. Un trigger es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos.

APRECIACIÓN DEL EQUIPO: En los triggers no aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales) Los triggers pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente. Los triggers solo se pueden aplicar a una tabla específica, es decir, un trigger no sirve para dos o más tablas El trigger se crea en la base de datos donde se trabaja, pero desde un trigger puedes hacer referencia a otras bases de datos. Un Trigger devuelve resultados al programa que lo desencadena de la misma forma que un Stored Procedure aunque no es lo más idoneo , para impedir que una instrucción de asignación devuelva un resultado se puede utilizar la sentencia SET NOCOUNT al principio del Trigger .
Tags