Bahena

Sunday, May 28, 2006

JOSE LUIS SANCHEZ BAHENA
ING. EN SISTEMAS COMPUTACIONALES
BASE DE DATOS
TRIGGER
(BASE DE DATOS)
TRIGGER ( BASE DE DATOS )

Un trigger o un disparador en una Base de datos es un evento que se ejecuta cuando se cumple una condición establecida al realizar una operación de inserción (INSERT), actualización (UPDATE) o borrado (DELETE).

Usos

Son ampliamente empleados en la personalizacion de la Administracion de la BD por ejemplo: un TRIGGER puede reestringir las operaciones DML sobre una tabla en particular en ciertas horas del dia, durante una o varias semanas o incluso meses.Otras aplicaciones de los TRIGGERS pueden ser las siguientes:1.- Generacion automatica de valores derivados de una columna2.- Prevenir transacciones invalidas3.- Proporcionar auditorias sofisticadas4.- Mantener la sincronia en tablas replicadas5.- Generar estadisticas de acceso6.- Modificar los valores de una vista7.- Publicar informacion de los eventos generados por la Bd.

Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con el usuario que ejecute la sentencia de SQL

Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc.

Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con el usuario que 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).

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, y
Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales.

Existen tipos de triggers, que se clasifican según la cantidad de ejecuciones a realizar:

Row Triggers (o Triggers de fila): son áquellos que se ejecutaran n-veces si se llama n-veces desde la tabla asociada al trigger

Statement Triggers (o Triggers de secuencia): son áquellos que sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única.

Creación de Triggers

Si un evento trigger ocurre, el administrador de triggers (llamado Ejecutor) inicializa la estructura global TriggerData *CurrentTriggerData (descrita más abajo) y llama a la función trigger para procesar el evento.

La función trigger debe ser creada antes que el trigger, y debe hacerse como una función sin argumentos, y códigos de retorno opacos.

La sintaxis para la creación de triggers es la siguiente:
CREATE TRIGGER ON FOR EACH EXECUTE PROCEDURE ();
El nombre del trigger se usará si se desea eliminar el trigger. Se usa como argumento del comando DROP TRIGGER.

La palabra siguiente determina si la función debe ser llamada antes (BEFORE) o después (AFTER) del evento.

El siguiente elemento del comando determina en que evento/s será llamada la función. Es posible especificar múltiples eventos utilizado el operador OR.

El nombre de la relación (relation name) determinará la tabla afectada por el evento.

La instrucción FOR EACH determina si el trigger se ejecutará para cada fila afectada o bien antes (o después) de que la secuencia se haya completado.

El nombre del procedimiento (procedure name) es la función C llamada.

Los argumentos son pasados a la función en la estructura CurrentTriggerData. El propósito de pasar los argumentos a la función es permitir a triggers diferentes con requisitos similares llamar a la misma función.

Además, la función puede ser utilizada para disparar distintas relaciones (estas funciones son llamadas "general trigger funcions"). Como ejemplo de utilización de lo descrito, se puede hacer una función 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 seguimiento automático de la creación de registros en una tabla de transacciones. Se podría utilizar también 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 operación INSERT, DELETE o UPDATE, pero permite lo siguiente a los triggers BEFORE: - retornar NULL e ignorar la operación 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 serán insertados (como la nueva versión de la tupla actualizada en caso de UPDATE) en lugar de la tupla original.

Notar que no hay inicialización por parte del CREATE TRIGGER handler. Esto será cambiado en el futuro. Además, si más de un trigger es definido para el mismo evento en la misma relación, el orden de ejecución de los triggers es impredecible. Esto puede ser cambiado en el futuro.

Si una función trigger ejecuta consultas SQL (utilizando SPI) entonces estas funciones pueden disparar nuevos triggers. Esto es conocido como triggers en cascada. No hay ninguna limitación explicita en cuanto al número de niveles de cascada.
Si un trigger es lanzado por un INSERT e inserta una nueva tupla en la misma relación, el trigger será llamado de nuevo (por el nuevo INSERT). Actualmente, no se proporciona ningún mecanismo de sincronización (etc) para estos casos pero esto puede cambiar. Por el momento, existe una función llamada funny_dup17() en los tests de regresión que utiliza algunas técnicas para parar la recursividad (cascada) en si misma...

Permite implementar programas basados en paradigma lógico (sistemas expertos, deducción).
Componentes

Ejemplo
Un sencillo ejemplo sería crear un trigger para insertar un pedido de algún producto cuando la cantidad de éste en nuestro almacén sea inferior a un valor dado
BEFORE UPDATE ON tabla_almacen
FOR ALL records
IF :NEW.producto <>
INSERT INTO tabla_pedidos(producto) VALUES (1000);
END IF;
END;
CREACION DE TRIGGER
CREATE TRIGGER -- Crea un nuevo disparador Sinopsis
CREATE TRIGGER name
{ BEFORE AFTER } { event
[OR ...] } ON table
FOR EACH { ROW STATEMENT } EXECUTE PROCEDURE
ER">funcBLE>
(Arguments)
Entradas
Name
El nombre de un disparador existente.
Table
El nombre de una tabla.
Event
Uno entre INSERT, DELETE o UPDATE.
Funcname
Una función suministrada por el usuario.
Salidas
CREATE
Se devuelve este mensaje si el disparador se ha creado con éxito.

0 Comments:

Post a Comment

<< Home