DB2觸發器簡單例子


db2使用版本9.7

創建A 、B兩個表,A表數據有更新、刪除、插入時,將A表ID記錄放入B表

1、create table A (id varchar(5),name varchar(30));

   create table B (id varchar(5),name varchar(30))

2、創建觸發器

--插入時觸動

CREATE TRIGGER administrator.tri_insert 

AFTER INSERT ON administrator.A

REFERENCING NEW AS N 

FOR EACH ROW MODE DB2SQL

BEGIN ATOMIC

    INSERT INTO administrator.B(ID,NAME) VALUES(N.ID,N.NAME );

END   

--測試: INSERT INTO  administrator.A VALUES ('3','Name');

 

--刪除時觸動

CREATE TRIGGER administrator.tri_delete

AFTER DELETE ON administrator.A

REFERENCING OLD AS O 

FOR EACH ROW MODE DB2SQL

BEGIN ATOMIC

    INSERT INTO administrator.B(ID) VALUES(O.ID);

END --測試:DELETE FROM administrator.A WHERE ID = '3' 

 

--更新時觸動 

CREATE OR REPLACE  TRIGGER administrator.tri_update

AFTER UPDATE OF NAME ON administrator.A

REFERENCING NEW AS N OLD AS O 

FOR EACH ROW MODE DB2SQL

BEGIN ATOMIC

    INSERT INTO administrator.B(ID,NAME) VALUES(O.ID,N.NAME);

END  

--測試:UPDATE administrator.A SET NAME = 'n2_name'  

 

--有資料提示 DB2 9.7以上版本支持 AFTER INSERT OR DELETE OR UPDATE 寫法,可是9.7版本並不支持

例子:

  CREATE OR REPLACE TRIGGER HIRED
   AFTER INSERT OR DELETE OR UPDATE OF SALARY ON EMPLOYEE
   REFERENCING NEW AS N OLD AS O FOR EACH ROW
   BEGIN
      IF INSERTING THEN 

  UPDATE COMPANY_STATS SET NBEMP = NBEMP + 1;

      ELSEIF 

  DELETING THEN UPDATE COMPANY_STATS SET NBEMP = NBEMP - 1;


      ELSEIF (UPDATING AND (N.SALARY > 1.1 * O.SALARY))
         THEN SIGNAL SQLSTATE '75000' SET MESSAGE_TEXT='Salary increase>10%';
      END IF;
   END; 

 

之后,考慮使用DB2中ORACLE兼容性的設置,db2set DB2_COMPATIBILITY_VECTOR=ORA , 依然不支持 AFTER INSERT OR DELETE OR UPDATE 寫法,有成功在9.7版本中成功使用AFTER INSERT OR DELETE OR UPDATE 寫法的麻煩指導下 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM