|
Triggers
Un trigger es un bloque PL/SQL asociado a una
tabla, que se ejecuta cuando una determinada instrucción
en SQL se va a ejecutar sobre dicha tabla.
La sintaxis para crear un trigger es la siguiente:
CREATE [OR REPLACE] TRIGGER
{BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF col1,
col2, . . ., colN]
[OR {DELETE|INSERT|UPDATE [OF col1, col2, . .
., colN]. . .]}
ON table
[REFERENCING OLD AS oldname, NEW as newname]
[FOR EACH ROW [WHEN (condition)]]
pl/sql_block
El uso de OR REPLACE permite sobreescribir un
trigger existente. Si se omite, y el trigger existe,
se producirá, un error.
El modificador FOR EACH ROW indica que el trigger
se disparará cada vez que se desee hacer
operaciones sobre una fila de la tabla. Si se
acompaña del modificador WHEN, se establece
una restricción; el trigger solo actuará,
sobre las filas que satisfagan la restricción.
A continuación se presenta un ejemplo
de creación de un trigger:
SQL> CREATE TRIGGER salary_check
1> BEFORE
2> INSERT OR UPDATE OF sal, job
3> ON employee
4> FOR EACH ROW
5> WHEN (new.job <> 'PRESIDENT')
6> DECLARE
7> minsal NUMBER
8> maxsal NUMBER
9> BEGIN
10> /* Se obtienen los valores minimo y maximo
para el salario de */
11> /* un cargo determinado, usando la tabla
sal_guide */
12> SELECT minsal, maxsal
13> INTO minsal, maxsal
14> FROM sal_guide
15> WHERE job = :new.job
16> /* Si el salario del empleado a insertar/modificar
esta por */
17> /* debajo del minimo, o por encima del
maximo, se genera */
19> /* un error. */
20> IF (:new.sal < minsal OR :new.sal >
maxsal)
21> THEN raise_application_error(-20601, 'Salary
'||:new.sal||
22> ' out of range for job '||:new.job||' for
employee '||
23> :new.ename);
24> END IF;
25 > END;
Este trigger impide que se agregue o modifique
un empleado con el sueldo mayor o menor que los
valores maximo y minimo respectivamente para su
cargo. Se agrega la restricción de que
el trigger no se dispararán si el cargo
es PRESIDENTE.
Si se desea eliminar (borrar) un trigger, se
usa la instrucción:
SQL> DROP TRIGGER name;
|