Está en la página 1de 4

BASE DE DATOS II 16

CAPITULO II.- PROGRAMACION EN ORACLE


2.2.- TRIGGERS.
Los triggers son definidos como acciones que se ejecutan cuando algún evento ocurre
en la base de datos.

Los triggers pueden ser casados para declaran reglas de integridad referencial para
forzar el cumplimiento de reglas de negocios o para auditar datos. El código de un triggers que
es llamado cuerpo del triggers es hecho o codificado mediante sentencias propias de Orade, la
ejecución de triggers es transparente al usuario y esto se ejecuta cuando ocurre algún evento
en la base de datos.

2.2.1.- PRIVILEGIOS DEL SISTEMA PARA EJECUTAR TRIGGERS.

Un usuario puede crear triggers sobre una tabla, entonces el usuario deberá tener
privilegio para alterar dichas tablas. Además los triggers se ejecutan y codifican desde un
usuario por tanto un usuario deberá tener los siguientes privilegios del sistema para trabajar
con triggers, deberá tener privilegios para modificar triggers y de esta forma poder cambiar o
eliminar el código del mismo.

En resumen un usuario deberá tener los siguientes privilegios que contiene el ROL
RESOURCE.

ARTER TABLE
CREATE TRIGGER
ALTER ANY TRIGGER

Los triggers en general hacen referencia al trabajo con tablas es por esto que un
usuario debe tener privilegios sobre las tablas que maneja el trigger.

Cabe indicar que los privilegios necesarios para las transacciones que ejecuta el
triggers sobre las tablas deben ser asignadas directamente al creador del trigger y no deben
ser asignadas mediante roles.

2.2.2.- TIPOS DE TRIGGERS.

Existen exactamente 14 tipos de triggers de acuerdo a la acción que se ejecuta y también


de acuerdo al nivel sobre el cual trabaja el trigger. Asi los triggers pueden clasificarse en los
siguientes grupos:

- TRIGGERS A NIVEL DE FILA: Los triggers a nivel de fila se ejecutan para cada fila en
una transacción, es decir realizaron una acción específica sobre cada tupla (fila) que
interviene en una transacción este tipo de triggers se lo identifica porque contienen la
sentencia FOR EACH ROW dentro del comando. CREATE TRIGGERS.

- TRIGGERS A NIVEL DE SENTENCIA: Estos triggers se ejecutan sobre una


transacción es decir realizaran una acción sobre una acción, para especificar este tipo
de trigger simplemente se especifica el comando CREATE TRIGGERS sin ninguna
clausula adicional y se sobre entiende que estos triggers se ejecutaran sobre
sentencias.

- TRIGGERS ANTES Y DESPUÉS DE: Los triggers ocurren a causa de eventos y los
triggers pueden dispararse inmediatamente antes o después de que ocurra un evento,
es decir pueden dispararse antes o después de insertar, actualizar o borrar datos.

SEXTO NIVEL
BASE DE DATOS II 17

Para especificar cada uno de los triggers para que se ejecuten antes o después se
usan las cláusulas: BEFORE o AFTER seguidos de la acción que se ejecutara sobre la
tabla y esto luego del comando CREATE TRIGGER.

- TRIGGER EN LUGAR DE: Estos triggers- ejecutan sentencias en lugar de otras


sentencias, por ejemplo se puede usar un trigger en lugar de si desea direccionar datos
de una tabla que son parte de una vista. Los triggers en lugar de se caracterizan por
tener la clausula INSTEAD OF luego del comando CREATE TRIGGERS. Los tipos
válidos de triggers son los siguientes:

1. BEFORE INSERT ROW


2. BEFORE INSERT STATEMENT
3. AFTER INSERT ROW
4. AFTER INSERT STATEMENT
5. BEFORE UPDATE ROW
6. BEFORE UPDATE STATEMENT
7. AFTER UPDATE ROW
8. AFTER UPDATE STATEMENT
9. BEFORE DELETE ROW
10. BEFORE DELETE STATEMENT
11. AFTER DELETE ROW
12. AFTER DELETE STATEMENT
13. INSTAEAD OF ROW
14. INSTEAD OF STATEMENT

La sintaxis para la creación de una TRIGGERS es la siguiente.

CREATE [OR REPLACE] TRIGGER [USER ] TRIGGERS_NAME


{BEFORE / AFTER/ INSTEAD OF}
{DELETE /INSERT/UPDATE [ of columnt, column…OF]]}
[OR DELETE/INSERT/UPDATE[ of column[, column…]}
ON[USER] {TABLE/VIEW}
[FOR EACH {ROW/STATEMENT} WHEN CODITION…]
BEGIN
} BODY TRIGGER
END;
.
/

A continuación se va a definir un trigger que trabaja a nivel de fila, se ejecutara antes


de actualizar una tabla y cuando se cumpla la condición de que una cuenta bancaria ha
incrementado su saldo en un 10% con respecto al monto anterior.

Exactamente lo que hace es almacenar en una tabla de auditoria los datos de la


transacción se torna tal que se pueda monitorear los ajustes hechos a una cuenta que superen
en un 10 % el saldo anterior.

1. CREATE TRIGGER cuenta_BEF_ UPD_ROW = antes de que se actualize una


fila.
2. BEFORE UPDATE of CUENTA
3. FOR each ROW
4. WHEN (NEW.SALDO/OLD.SALDO\> 1.1
5. BEGIN
6. INSERT INTO cuenta_auditoria
7. VALUES (:OLD.fecha, : old. Accion. : OLD. SALDO);
8. END;

SEXTO NIVEL
BASE DE DATOS II 18

Este ejemplo ilustra el uso de las palabras claves NEW y OLD para referirse a los
nuevos y viejos valores de una columna.

En la línea 1 Se crea un triggers llamado cuenta BEF UPD_ROW, de forma tal que
se especifica en el nombre la tabla sobre la que actúa y las acciones o el tipo del triggers que
se crea; así por ejemplo si creo el trigger:

AFTER DELETE
Cuenta_AFT_DEL Este debería ser el nombre.

En la línea 2 se especifica el tipo de triggers y el nombre de la tabla sobre la que


actuara el triggers.

En la línea 3 especifica que el triggers actuará sobre cada fila de la tabla cuenta.

La clausula WHEN adiciona un criterio más amplio sobre las condiciones del disparo
para el triggers en este caso esta condición especifica que el triggers se disparará cuando el
saldo nuevo supere en un 10 % al saldo anterior, además de el trigger se ejecutará cuando se
intente actualizar una fila en la tupla cuenta.

A continuación se especifica el cuerpo del triggers dentro de las sentencias BEGÍN y


END el mismo que especifica las acciones que se ejecuten sobre los datos y sobre las tablas.

Cuando se desee especificar valores nuevos o viejos para un campo dentro del cuerpo
del triggers estos deben estar precedidos de 2 puntos.

Dentro del cuerpo de este triggers se almacenan datos antiguos de una transacción
dentro de la tabla de auditoria, se supone que esta tabla de Auditoria ya este creada y que
además el propietario del trigger tiene privilegios del inserción de datos sobre la misma.

Por último este trigger se disparará cuando se intente actualizar valores en la tabla
cuenta y los saldos o el saldo supere en un 10% al anterior. Este no actuará sobre cambios
hechos en la tabla de auditoria Cuenta_auditoria.

El cuerpo del trigger especifica que se inserte dentro de una tabla de auditoria que
previamente debe existir, una valor antiguo a la transacción (fecha, cantidad, persona), cuando
se utiliza las palabras claves OLD o NEW dentro del cuerpo del trigger se deben especificar
anteponiendo ":"

: OLD : NEW

Este ejemplo es el típico trigger de auditoria, cuya actividad es completamente


transparente al usuario quién solamente actualizará datos dentro de la tabla del libro mayor.

2.2.3.- COMBINACIÓN DE VARIOS TIPOS DE TRIGGERS

Cuando se ejecutan varios comandos dentro de una tabla, por ejemplo. Inserción,
actualización, borrado, todas estas acciones pueden ser combinadas dentro de un solo
triggers.

El ejemplo a continuación muestra un triggers que se ejecuta siempre que ocurra una
inserción o una actualización de datos dentro de la tabla libro_mayor. El cuerpo del triggers se
dividirá en dos porciones de acuerdo a la acción que se realice (actualización- inserción).

Create trigger Libro mayor_BEF_UPD_IPI_COW


Before insert or UPDATE OF CUENTA ON LIBRO MAYOR

SEXTO NIVEL
BASE DE DATOS II 19

FOR EACH ROW


BEGIN
If INSERTING THEN
INSERT INTO LIBRO MAYOR_AUDIT
VALUES(:NEW. DATE,: NEW. ACTION,: NEW .ITEM,.....

SEXTO NIVEL

También podría gustarte