miércoles, 11 de enero de 2012

Clase 7 - Miercoles 11 de Enero de 2012


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