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
Publicar un comentario