TRIGGERS O DISPARADORES


I.    TRIGGERS:
1.     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. Por lo tanto, son empleados para implementar las REGLAS DE NEGOCIO (tipo especial de integridad) de una base de datos. Una Regla de Negocio es cualquier restricción, requerimiento, necesidad o actividad especial que debe ser verificada al momento de intentar agregar, borrar o actualizar la información de una base de datos. 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.
2.     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 

3.     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 ]  
La sintaxis es similar a la instrucción CREATE TRIGGER.
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

4.     EJEMPLOS:
v 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
v 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%'

II. 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).
Los Triggers se definen 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á.
III. SUMMARY:
A "trigger" is a type of stored procedure that is executed when you try to modify the data in a table (or view).
They are defined for a specific table (or view).
They are created to preserve the referential integrity and coherence between the data between different tables.
Attempting to modify (add, update or delete) data from a table in which a trigger for any of these actions (insert, update and delete), the trigger is executed (triggered) automatically defined.
A trigger is associated with an event (insertion, update or deletion) on a table.
The difference with the stored procedures of the system is that the triggers:
ü  They can not be invoked directly; when trying to modify the data of a table for which a trigger has been defined, the trigger is executed automatically.
ü  They do not receive and return parameters.
ü  They are appropriate to maintain the integrity of the data, not to obtain query results.
Triggers, unlike "check" restrictions, can refer to fields in other tables. For example, you can create an insert trigger in the "sales" table that checks the "stock" field of an article in the "articles" table; the trigger would control that, when the value of "stock" is less than the amount that is trying to sell, the insertion of the new record in "sales" is not made.
The triggers are executed AFTER the execution of an instruction "insert", "update" or "delete" in the table in which they were defined. The restrictions are checked BEFORE executing an "insert", "update" or "delete" statement. Therefore, the restrictions are checked first, if any restriction is violated, the trigger does not get executed.
The triggers are created with the "create trigger" instruction. This instruction specifies the table in which the trigger is defined, the events for which it is executed and the instructions it contains.

Basic syntax:
 create triggre NOMBREDISPARADOR
  on NOMBRETABLA
  for EVENT- insert, update or delete}
 ace
  SENTENCES

Analysis the syntax:
ü  "create trigger" next to the name of the trigger.
ü  "on" followed by the name of the table or view for which the trigger is set.
ü  After "for", the action (event, type of modification) is indicated on the table or view that activates the trigger. It can be "insert", "update" or "delete". At least ONE action must be placed, if more than one is placed, they must be separated with commas.
ü  After "as" comes the body of the trigger, the conditions and actions of the trigger are specified; that is, the conditions that determine when an attempt to insert, update or delete causes the actions that the trigger will perform.

IV. 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".

V. 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.

VI. 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.

VII. GLOSARIO DE TÉRMINOS:
·    Indizar: Es el proceso de explicar o representar el contenido temático de un recurso de información.
·       Subyacentes: Es aquello que se encuentra escondido, es decir, es algo que no es apreciable de manera evidente.
·       Filtro: Se refiere a un programa diseñado para controlar qué contenido se permite mostrar, especialmente para restringir el acceso a ciertos materiales de la Web.
·       Emular: Es ejecutar programas en una plataforma diferente de aquella para la cual fueron escritos originalmente.
·       Índice clúster: Es una estructura de disco asociada con una tabla o una vista que acelera la recuperación de filas de la tabla o de la vista. Cuando una tabla tiene un índice clúster, la tabla se denomina tabla agrupada.

VIII. LINKOGRAFÍA:
ü  http://www.tutorialesprogramacionya.com/sqlserverya/temarios/descripcion.php?cod=147&punto=&inicio=
ü  https://www.aulaclic.es/sqlserver/t_9_7.htm
ü  https://es.wikipedia.org/wiki/Trigger_(base_de_datos)}
ü https://www.ibm.com/support/knowledgecenter/es/SSEPGG_8.2.0/com.ibm.db2.udb.doc/admin/r0000931.htm
ü  https://sites.google.com/site/soluciones7inf/our-company/our-staff
ü  https://es.slideshare.net/LisbethOcaaBueno/triggers-o-disparadores-97587802

Comentarios

Entradas más populares de este blog

TRANSACCIONES EN SQL SERVER

APLICACIONES N-CAPAS EN VISUAL.NET

PROCEDIMIENTOS ALMACENADOS