Trigger y cursores oracle
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 tabala.
La sintaxis para crear un trigger esla siguiente:
CREATE [OR REPLACE] TRIGGER
{BEFORE | AFTER}{DELETE | INSERT| UPDATE[OF col1,col2……colN]
[OR {DELETE | INSERT | UPDATE[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 sobrescribir un trigger existente. Si se omite , y el trigger existe, se producirá un error.
Elmodificador FOR EACH ROW indica que el trigger se disparara 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; eltrigger solo actuara, 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 ORUPDATE 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 valoresmínimo y máximo 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.job16> /*Si el salario del empleado a insertar / modificar esta por */
17> /*debajo del mínimo , o por encima del maximo, se genera*/
18> /*un error*/
19> IF(:new.salmaxsal)
20> THENraise_aplication_error(-20601,’Sslary’ || :new.sal || ‘out of range for job‘ || :new.job ‘for employee’ || :new.ename);
21> END IF
22> END
Este trigger impide que se agregue o modifique unempleado con el sueldo mayor o menor que los valores máximo y mínimo respectivamente para su cargo. Se agrega la restricción de que el trigger no se dispara si el cargo es PRESIDENTE.
Si se desea...
Regístrate para leer el documento completo.