Trigger o Disparador

También podría gustarte

Está en la página 1de 7

TRIGGER O DISPARADOR

Un Disparador o Trigger es una rutina autnoma asociada con una tabla o vista
que automticamente realiza una accin cuando una fila en la tabla o la vista se
inserta (INSERT), se actualiza (UPDATE), o borra (DELETE). Un Disparador
nunca se llama directamente, en cambio, cuando una aplicacin o usuario intenta
insertar, actualizar, o anular una fila en una tabla, la accin definida en el
disparador se ejecuta automticamente (se dispara).

Las ventajas de usar los Disparadores son:
La entrada en vigor automtica de restricciones de los datos, hace que los
usuarios entren slo valores vlidos.
El mantenimiento de la aplicacin se reduce, los cambios a un disparador
se refleja automticamente en todas las aplicaciones que tienen que ver
con la tabla sin la necesidad de recompilar o relinquear.
Logs automticos de cambios a las tablas. Una aplicacin puede guardar
un registro corriente de cambios, creando un disparador que se active
siempre que una tabla se modifique.
La notificacin automtica de cambios a la Base de Datos con alertas de
evento en los disparadores.
Los Disparadores tienen dos palabras clave, OLD y NEW que se refieren a los
valores que tienen las columnas antes y despus de la modificacin. Los INSERT
permiten NEW, los DELETE slo OLD y los UPDATE ambas.
Un ejemplo de un disparador seria uno asociado a la sentencia DELETE en una
tabla de clientes, para impedir que se elimine uno que tenga un saldo distinto de
cero. Otro disparador seria guardar los datos que se modifican de un cliente en
otra base de datos que servira de auditoria.
VENTAJAS DE LOS TRIGGER
Seguridad de los datos mejorada
Ofrecen chequeos de seguridad basada en valores ,Integridad de los datos
mejorada
Fuerzan restricciones dinmicas de integridad de datos yde integridad
referencial.
Aseguran que las operaciones relacionadas se realizan juntas de forma implcita
Respuesta instantnea ante un evento auditado
Ofrece un mayor control sobre la B.D.

DESVENTAJAS
Hay que definir con anticipacin la tarea que realizara el trigger
Peligro de prdida en Reorganizaciones
Hay que programarlos para cada DBMS
Un Trigger nunca se llama directamente
Los triggers no se desarrollan pensando en un solo registro, los mismos deben
funcionar en conjunto con los datos ya que se disparan por operacin y no por
registro
Por funcionalidad, no hay que poner en uno solo las funciones de INSERT,
UPDATE y DELETE.
Utilizar moderadamente los triggers
No se pueden utilizar en tablas temporales.
Adems, la funcin puede ser utilizada para disparar distintas relaciones (estas
funciones son llamadas "general trigger funcions").
Como ejemplo de utilizacin de lo descrito, se puede hacer una funcin general
que toma como argumentos dos nombres de campo e inserta el nombre del
usuario y la fecha (timestamp) actuales en ellos. Esto permite, por ejemplo, utilizar
los triggers en los eventos INSERT para realizar un Guia del Programador de
PostgreSQL

CREATE TRIGGER <trigger name> <BEFORE|AFTER>
<INSERT|DELETE|UPDATE>
ON <relation name> FOR EACH <ROW|STATEMENT>
EXECUTE PROCEDURE <procedure name> (<function args>);
Triggers (disparadores) Pgina 1 de 2
http://lucas.hispalinux.es/Postgresql-es/web/navegable/programmer/triggers.html
20/10/2002
seguimiento automtico de la creacin de registros en una tabla de transacciones.
Se podra utilizar
tambin para registrar actualizaciones si es utilizado en un evento UPDATE.
Las funciones trigger retornan un rea de tuplas (HeapTuple) al ejecutor. Esto es
ignorado para
trigger lanzados tras (AFTER) una operacin INSERT, DELETE o UPDATE, pero
permite lo siguiente a los triggers BEFORE: - retornar NULL e ignorar la operacin
para la tupla actual (y de este modo la tupla no ser
insertada/actualizada/borrada); - devolver un puntero a otra tupla (solo en eventos
INSERT y UPDATE) que sern insertados (como la nueva versin de la tupla
actualizada en caso de UPDATE) en lugar de la tupla original.
Notar que no hay inicializacin por parte del CREATE TRIGGER handler. Esto
ser cambiado en el futuro. Adems, si ms de un trigger es definido para el
mismo evento en la misma relacin, el orden de ejecucin de los triggers es
impredecible. Esto puede ser cambiado en el futuro.
Si una funcin trigger ejecuta consultas SQL (utilizando SPI) entonces estas
funciones pueden disparar nuevos triggers. Esto es conocido como triggers en
cascada. No hay ninguna limitacin explicita en cuanto al nmero de niveles de
cascada.
Si un trigger es lanzado por un INSERT e inserta una nueva tupla en la misma
relacin, el trigger ser llamado de nuevo (por el nuevo INSERT). Actualmente, no
se proporciona ningn mecanismo de sincronizacin (etc) para estos casos pero
esto puede cambiar. Por el momento, existe una funcin llamada funny_dup17()
en los tests de regresin que utiliza algunas tcnicas para parar la recursividad
(cascada) en si misma.

EJEMPLOS DE TRIGGER
1.-
Triggers DML: INSTEAD OF
Los TRIGGERS de tipo Instead OF son TRIGGERS que se disparan en lugar de la
operacin que los produce, es decir, una operacin de borrado de registros con la
instruccin delete sobre una tabla que tiene un TRIGGER de tipo INSTEAD OF no
se llega a realizar realmente, sino que SQL Server 2005 cuando detecta esta
operacin invoca al TRIGGER que es el responsable de actuar sobre los registros
afectados, en el ejemplo que estamos siguiendo, el TRIGGER sera el
responsable de borrar los registros de la tabla que ha disparado el evento. Si el
TRIGGER no se encarga de esta tarea, el usuario tendr la sensacin de que SQL
Server no hace caso a sus comandos ya que por ejemplo una instruccin DELETE
no borrar los registros.

Como ejemplo de TRIGGER de tipo INSTEAD OF vamos a ver como se
implementara la siguiente regla: no se pueden borrar los clientes cuyo Crdito
Total sea mayor que cero, sin embargo si dentro de una operacin de borrado hay
clientes con Riesgo Total cero y otros con Riesgo Total distinto de cero, los que
tengan cero si deben resultar eliminados. El TRIGGER que implementara esa
regla sera el siguiente.
CREATE TRIGGER TR_BorradoSelectivo on Clientes INSTEAD OF DELETE
AS
BEGIN
DELETE c
FROM Clientes C
INNER JOIN DELETED d
ON C.idCliente=D.idCliente
WHERE C.CreditoTotal=0
END
2.-
Triggers DML: AFTER
Todos los TRIGGERS sirven en general para implementar restricciones de
negocio avanzadas, como ejemplo vamos a ver como se construira un TRIGGER
que impidiese que se aumentase el Crdito total de un cliente que tenga pagos
pendientes, para ello vamos a suponer una tabla de clientes con identificador
idCliente y con un campo llamado CreditoTotal y una tabla de recibos conteniendo
el idcliente y el estado del recibo (estos son solamente los campos que son
relevantes para nuestro ejemplo).
CREATE TRIGGER TR_CompruebaCreditoTotal ON Clientes AFTER UPDATE
AS
BEGIN
IF UPDATE(CreditoTotal)
-- Se est actualizando el campo crdito total, comprobemos
-- las restricciones.
BEGIN
IF EXISTS( SELECT IdCliente
FROM RECIBOS
WHERE Estado=PEN AND idCliente IN (SELECT idCliente FROM DELETED)
)
BEGIN
ROLLBACK -- Deshacemos la transaccin impidiendo que se actualize
RAISERROR (No se pueden actualizar el crdito de clientes con recibos
pendientes,16,1)
END
END
END

3.-
Triggers DDL: a nivel de base de datos
Los TRIGGERS DML (Data Manipulation Language) responden a la necesidad de
garantizar la integridad y consistencia de los datos dentro de nuestras tablas de
usuario, sin embargo no ayudan a mantener las reglas de diseo de nuestra base
de datos. El nombre coincide pero el propsito es distinto, los triggers DDL (Data
Definition Language) nos proporcionarn mecanismos para garantizar que nuestra
base de datos est diseada e implementada de acuerdo a los estndares que
hayamos definido.

Los TRIGGERS DDL tienen dos alcances diferenciados, a nivel de servidor y a
nivel de base de datos. Estos alcances estn enlazados con el tipo de evento que
los dispare, en esta primera parte los eventos que vamos a ver son a nivel de
Base de datos y algunos ejemplos de ellos son:
CREATE / ALTER /DROP View
CREATE / ALTER /DROP Table
CREATE / ALTER /DROP Schema

Aunque hay muchos ms, relacionados con estadsticas, sinnimos, usuarios (no
confundir con logins que son a nivel de servidor), procedimientos, etc. Puede
consultar los libros en pantalla de SQL Server 2005 para obtener una relacin
completa de todos los eventos a los que puede responder.

Los TRIGGERS DDL tiene una particularidad adicional sobre los de tipo DML y es
que no tiene mucho sentido las tablas inserted y deleted ya que el tipo de
operaciones que disparan los triggers son radicalmente diferentes. Sin embargo,
como ellos necesitan recibir informacin acerca del evento que ha ocasionado que
el trigger se dispare, para ello existe la funcin EVENTDATA(), esta funcin
devuelve un valor XML que responde al siguiente esquema:
<EVENT_INSTANCE>
<EventType>type</EventType>
<PostTime>date-time</PostTime>
<SPID>spid</ SPID>
<ServerName>name</ServerName>
<LoginName>name</LoginName>
<UserName>name</UserName>
<DatabaseName>name</DatabaseName>
<SchemaName>name</SchemaName>
<ObjectName>name</ObjectName>
<ObjectType>type</ObjectType>
<TSQLCommand>command</TSQLCommand>
</EVENT_INSTANCE>


PROCEDIMIENTOS ALMACENADOS

Los procedimientos almacenados y funciones son nuevas funcionalidades de la
versin de MySQL 5.0. Un procedimiento almacenado es un conjunto de
comandos SQL que pueden almacenarse en el servidor. Una vez que se hace, los
clientes no necesitan relanzar los comandos individuales pero pueden en su lugar
referirse al procedimiento almacenado.
Algunas situaciones en que los procedimientos almacenados pueden ser
particularmente tiles:
Cuando mltiples aplicaciones cliente se escriben en distintos lenguajes o
funcionan en distintas plataformas, pero necesitan realizar la misma
operacin en la base de datos.
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan
procedimientos almacenados para todas las operaciones comunes. Esto
proporciona un entorno seguro y consistente, y los procedimientos pueden
asegurar que cada operacin se loguea apropiadamente. En tal entorno, las
aplicaciones y los usuarios no obtendran ningn acceso directo a las tablas
de la base de datos, slo pueden ejectuar algunos procedimientos
almacenados.
Los procedimientos almacenados pueden mejorar el rendimiento ya que se
necesita enviar menos informacin entre el servidor y el cliente. El intercambio que
hay es que aumenta la carga del servidor de la base de datos ya que la mayora
del trabajo se realiza en la parte del servidor y no en el cliente. Considere esto si
muchas mquinas cliente (como servidores Web) se sirven a slo uno o pocos
servidores de bases de datos.

También podría gustarte