PDF de programación - Disparadores - Trigger

Imágen de pdf Disparadores - Trigger

Disparadores - Triggergráfica de visualizaciones

Publicado el 23 de Junio del 2021
780 visualizaciones desde el 23 de Junio del 2021
100,7 KB
9 paginas
Creado hace 17a (30/10/2006)
Disparadores - Trigger

1

Disparadores (triggers - T)

Disparadores (triggers)

• Definición
• Elementos de un T
• Tipo de T según cuando se dispare
• Estado de una T
• Acoplamiento o Consideración de T
• Combinación de T

• Algoritmos y modelos de Ejecución
• Uso de las T

Originales de Sybase SQL Server.

– No forman parte de SQL2 (SQL92)
– Pero sí de SQL3

Procedimientos que ejecuta de manera implícita el

SGBD como respuesta a un evento
– Base fundamental de las Bases de Datos Activas

Por ejemplo:

– Cuando hay menos de X productos en stock, hacer un nuevo pedido
– Si el producto caduca hoy avisar almacén para que lo retiren
– Cuando sean las 17:00h hacer copia de seguridad de la BD

Elementos de un disparador

Disparadores son ECA: Evento + Condición + Acción
Evento:

– Suceso que causa que se dispare un trigger

• INSERT, UPDATE, DELETE
• Oracle (además: CREATE, ALTER, DROP, LOGON, LOGOFF,

STARTUP, SHUTDOWN, SERVERERROR)

Condición:

– Expresión booleana que debe ser TRUE para que se dispare el

trigger realmente. La acción no se ejecuta si la expresión se
evalúa a FALSE o Unknown.

Acción:

– Procedimiento que se debe ejecutar cuando se dispare el trigger.

• Oracle: PL/SQL, Java, Llamada a procedimiento en C
• SQL Server: Transact-SQL
• No admiten instrucciones de control de transacciones

Sintaxis: Disparadores en SQL3

CREATE TRIGGER <identificador>
{AFTER | BEFORE | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF <atributo>?} ON <tabla>
[FOR EACH ROW | STATEMENT?
[REFERENCING OLD AS <nombre> NEW AS <nombre>?
[REFERENCING OLD_TABLE AS <nom> NEW_TABLE AS <nom> ?
[WHEN <condición> ?

<bloque de acciones sobre la base de datos> o
<llamada a un procedimiento almacenado> o
<llamada a una función externa>

DROP TRIGGER <identificador>

REPLACE TRIGGER <identificador> <lo mismo que create>

Disparadores. Primer ejemplo

Disparadores. Primer ejemplo

Evento:

– Se modifican las existencias de la tabla productos (a menos)

Condición:

– Hay menos unidades que el mínimo (x)

Acción:

– Hacer un nuevo pedido de aquellos productos que tienen menos

unidades que X.

CREATE TRIGGER NuevoPedido
AFTER UPDATE OF unidades ON Producto
WHEN NEW.unidades < X
FOR EACH ROW

E

C

CREATE TRIGGER: Nombre del T o regla activa. Ej CREATE TRIGGER NuevoPedido

AFTER: Regla que se activará despues de que tenga lugar el evento (E)

ON: Tabla o relación asociada al E. Por ej, ON Producto

UPDATE OF: Atributos actualizables para los E Upadate. Por ej, UPDATE OF unidades

WHEN: Condición (C) a verificar después de activarse el T. Por ej, WHEN New.unidades < X

FOR EACH ROW: Se activara una vez para cada una tuplaque afecte al T.

BEGIN ... END: La Acción (A) a emprender. Por ej, BEGIN INSERT INTO ... END

NEW y OLD: Permite referenciar a la tupla insertada y eliminada por el T. Por ej, Old.código

EJ.

CREATE TRIGGER NuevoPedido

AFTER UPDATE OF unidades ON Producto

WHEN New.unidades<X

FOR EACH ROW

BEGIN INSERT INTO PEDIDO VALUES (Old.código, X, today()) ... END

BEGIN

INSERT INTO PEDIDO

VALUES (:OLD.código, X, today ())

...
END

CrearNuevoPedido

A

DBD 2006-2007

Disparadores - Trigger

2

Disparadores: Tipos

CREATE TRIGGER <nombre del T.>
{AFTER | BEFORE | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF <atributo>?} ON <tabla>

Según cuando se ejecutan la acción:

– BEFORE trigger

• Se ejecuta la acción antes de que se realice la operación que desencadena

el evento

– Antes de insertar, borrar, modificar...

– AFTER trigger

• Se ejecuta después de que se realice la operación que desencaden a el

evento

– Después de insertar, borrar, modificar...

– INSTEAD OF trigger

• Se ejecuta en lugar de la operación que desencadena el evento

– En lugar de insertar, borrar, modificar

Comparación BEF-AFT-INS
Antes
Create trigger T
BEFORE insert ON Cuenta
EnviarMensaje()

T

INSERT...

Despues

Create trigger T
AFTER insert ON Cuenta
EnviarMensaje()

En lugar de

Create trigger T
INSTEAD OF insert ON Cuenta
EnviarMensaje()

INSERT...

T

INSERT...

T

INSERT INTO Cuenta
VALUES (...)

Disparadores inmediatos y vistas

BEFORE y AFTER

– Sólo para tablas de base
– NO para vistas

• si se inserta en una vista y la tabla de base subyacente tiene

un trigger BEFORE o AFTER, entonces sí se dispara.

INSTEAD OF
– Para vistas

• Es una manera transparente de modificar vistas no

modificables.

• Si se sabe cuál es la operación asociada a una inserción en

una tupla, se puede indicar en un trigger la operación
asociada.

Disparadores: Tipos

CREATE TRIGGER <identificador>
{AFTER | BEFORE | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF <atributo>?} ON <tabla>
[FOR EACH ROW | STATEMENT ?

Según el nivel
• EACH ROW (A nivel de fila)

– Se dispara el trigger una vez por cada una de las tuplas afectadas

por la sentencia que desencadena el evento

• Insertar 5 tuplas: ?se dispara 5 veces
• Modificar 0 tuplas: ?no se dispara
• Se pueden usar los valores NEW y OLD para referenciar a los

cambios a realizar a la BD.

• STATEMENT (A nivel de Sentencia)

Disparadores: Tipos

CREATE TRIGGER <identificador>
{AFTER | BEFORE | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF <atributo>?} ON <tabla>
[FOR EACH ROW | STATEMENT ?

Según el nivel
• EACH ROW (A nivel de fila)
• STATEMENT

Se dispara el trigger una vez por cada sentencia que desencadena el
evento (sin tener en cuenta las tuplas afectadas ni la transacción en
que se encuentren)

Insertar 5 tuplas: ?se dispara 1 vez el trigger.


• Modificar 0 tuplas: ?se dispara 1 vez el trigger.
• Se pueden usar las tablas NEW_TABLE y OLD_TABLE para referenciar a los

cambios que se realizan a la BD (SQL Server: INSERTED, DELETED)

Comparación ROW-STAT

Create triggerT
BEFORE update ON Cuenta
FOR EACH ROW
Mensaje()

Create triggerT
BEFORE update ON Cuenta
STATEMENT
Mensaje()

T

Update

T

Update

Update modifica 2 tuplas

Update

Update

T

DBD 2006-2007

Disparadores - Trigger

3

Combinaciones de triggers

BEFORE statement trigger

– Antes de ejecutarse la operación que desencadena el evento se

ejecuta la acción del trigger.

BEFORE row trigger

– Antes de modificar cada una de las filas afectadas por la operación

que desencadena el evento y antes de comprobar las reglas de
integridad se ejecuta la acción del trigger (éstos no bloquean la fila).

AFTER row trigger

– Después de modificar cada una de las filas afectadas por la

operación que desencadena el evento y las reglas de integridad
asociadas, se ejecuta la acción del trigger para la fila actual (éstos
bloquean la fila)

AFTER statement trigger

– Se ejecuta la acción del trigger después de ejecutar la operación que

desencadena el evento y después de aplicar las restricciones
diferidas.

Renombrar a OLD y NEW

CREATE TRIGGER <identificador>
{AFTER | BEFORE | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF <atributo>?} ON <tabla>
[FOR EACH ROW | STATEMENT ?
[REFERENCING OLD AS <nombre> NEW AS <nombre>?
[REFERENCING OLD_TABLE AS <nom> NEW_TABLE AS <nom> ?

FOR EACH ROW
REFERENCING OLD AS <nombre> NEW AS <nombre>
- Es posible renombrar las tuplas OLD y NEW

STATEMENT
REFERENCING OLD_TABLE AS <nom> NEW_TABLE AS <nom>
- Es posible renombrar las talbas OLD y NEW

Sintaxis: Disparadores en SQL3

CREATE TRIGGER <identificador>
{AFTER | BEFORE | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF <atributo>?} ON <tabla>
[FOR EACH ROW | STATEMENT ?
[REFERENCING OLD AS <nombre> NEW AS <nombre>?
[REFERENCING OLD_TABLE AS <nom > NEW_TABLE AS <nom > ?
[WHEN <condición> ?

La condiciones pueden ser:

• Bloque de acciones sobre la base de datos
• Llamada a un procedimiento almacenado
• Llamada a una función externa

Estado de triggers

Una regla o trigger, por medio de su nombre, se puede:

– Activar / ENABLE
• Se puede disparar
• Por defecto (Consultar SGBD)

– Desactivar / DISABLE
• No se puede disparar

– Eliminar / DROP

Nota: Se podrían agrupara para facilitar las acciones anteriores .

Sintaxis:

ALTER TRIGGER <identificador> {ENABLE | DISABLE}
DROP TRIGGER <identificador>

Consideración o Acoplamiento

Consideración o Acoplamiento

Cuando se deber realizar la acción activada.

• Antes del evento / BEFORE
• Despues del evento / AFTER

• Simultaneamente al evento / INSTEAD OF

La acción se realiza en la misma transacción o en una nueva

• Consideración Inmediata / INMEDIATE
• Consideración Diferida / DEFERRED

• Consideración Separada / DETACHED

Acoplamiento Inmediato (INMEDIATE)

La condición se evalúa dentro de la misma transacción que la del
evento que la desencadena y se hace inmediatamente

• BEFORE: Se evalúa la condición antes de la ejecución de la operación
• AFTER: Se evalúa la condición después
• INSTEAD OF: Se evalúa la condición en lugar de realizar la operación

Acoplamiento diferido (DEFERRED)

– La condición se evalúa al final de la transacción que contenía l a
operación desencadenadora. En este caso puede haber muchos
triggers esperando a evaluar su condición.

Acoplamiento separado (DETACHED)

– La condición se evalúa dentro de una transacción separada nacida de

la transacción desencadenadora.

DBD 2006-2007

Disparadores - Trigger

4

Acoplamiento inmediato

Acoplamiento diferido

comienzo de transacción

¿condición?

ejecución
acción

final de transacción

Uso: restricciones de integridad
complejas que requieren una
comprobación inmediata

Acoplamiento Inmediato (INMEDIATE)
La condición se evalúa dentro de la misma transacción que
la del evento que la desencadena y se hace inmediatamente

comienzo de transacción

Uso: restricciones de
integridad complejas
diferidas

final de transacción

¿condición?

ejecución
acción

Acoplamiento diferido (DEFERRED)
La condición se evalúa al final de la transacción que contenía l a operación
desencadenadora. En este caso puede haber muchos triggers esperando
a evaluar su condición.

Acoplamiento separado

Ejemplo

comienzo de transacción

Uso: restricciones de
integridad complejas
diferidas

subtransacción

¿condición?

ejecución
acción

fin subtransacción

final de transacción

Acop
  • Links de descarga
http://lwp-l.com/pdf19334

Comentarios de: Disparadores - Trigger (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad