TRIGGER
-------
Ejemplo de Creacion de trigger
CREATE [OR REPLACE] TRIGGER <trigger_name>
{BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name>
[REFERENCING [NEW AS <new_row_name>] [OLD AS <old_row_name>]]
[FOR EACH ROW [WHEN (<trigger_condition>)]]
<trigger_body>
Ejercicio
---------
Creacion de tablas
CREATE TABLE T4 (a INTEGER, b CHAR(10));
CREATE TABLE T5 (c CHAR(10), d INTEGER);
Creacion de trigger asociado a la tablas T4 - T5
-------------------------------------------------
CREATE TRIGGER trig1
AFTER INSERT ON T4
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow.a <= 10)
BEGIN
INSERT INTO T5 VALUES(:newRow.b, :newRow.a);
END trig1;
Insertar informacion en tabla T4 para ejecutar trigger
-----------------------------------------------------
INSERT INTO T4 VALUES (4,5)
revisar tabla que fue poblada por trigger "trig1"
-------------------------------------------------
select * from t5;
Creacion Trigger 2
------------------
CREATE TRIGGER TopeDeManejoPropiedadEmpleado
BEFORE INSERT OR UPDATE ON Propiedad
FOR EACH ROW
DECLARE
vcontP NUMBER;
BEGIN
SELECT COUNT(*) INTO vcontP
FROM Propiedad
WHERE numEmpleado = new.numEmpleado;
IF vcontP = 100
Raise_application_error(-2000, (‘Empleado ‘|| new.numEmpleado|| ‘ ya administra 100 propiedades’);
END IF
END
Creacion Trigger 3
-------------------
create table Person (age int);
CREATE TRIGGER PersonCheckAge
AFTER INSERT OR UPDATE OF age ON Person
FOR EACH ROW
BEGIN
IF (:new.age < 0) THEN
RAISE_APPLICATION_ERROR(-20000, 'no negative age allowed');
END IF;
END;
RUN;
Si intentamos ejecutar la inserción:
insert into Person values (-3);
Desactivando el trigger
-------------------------
Alter trigger PersonCheckAge disable;
Para ver una lista de los triggers definidos usar:
--------------------------------------------------
select trigger_name
from user_triggers;
Para eliminar un trigger se utiliza
------------------------------------
Drop trigger «nombre_trigger»;
Para desactivar un trigger se utiliza
-------------------------------------
Alter trigger «nombre_trigger» disable;
Para activar un trigger se utiliza
----------------------------------
Alter trigger «nombre_trigger» enable;
Para activar todos los trigger de una tabla se utiliza
------------------------------------------------------
Alter table «nombre_tabla» enable all triggers;
No hay comentarios:
Publicar un comentario