db2 触发器

2018-09-13  本文已影响128人  启灵Alex

db2 触发器

语法:

1.CREATE TRIGGER trigger_name
2.NO CASCADE BEFORE 
3.INSERT ON ZFS_ADJUSTMENT 
4.REFERENCING 
5.NEW AS NEWROW
6.FOR EACH ROW MODE DB2SQL
7.BEGIN ATOMIC
8.    IF (NEWROW.ADJ_reason IS NULL) THEN
9.       SET NEWROW.ADJ_reason = '2099-1-1';
10.    END IF;
11.END

解释:

  • 1.创建触发器 【trigger_name】为触发器名称。
  • 2.指定触发时机,列如: before ,after,instead of
  • 3.指定触发事件,以及涉及的字段和表,触发事件:insert,update,delete;字段和表语法:of 字段 on 表 【其中 on 表是不可省略的】
  • 4.5.指定操作前和操作后的行记录,new,old
  • 6.指定触发次数,FOR EACH ROW,FOR EACH STATEMENT,其中前者指按行触发,后者指按语句触发,列如:有一条SQL语句要修改10跳记录,则FOR EACH ROW要运行10次,而FOR EACH STATEMENT只运行一次。
  • 7.内容开始【ATOMIC可用于发生错误回滚数据,非必要项】
  • 8.9.10.内容
  • 11.结束

注意:

  1. 根据触发事件【3】的不同决定new和old【4.5】是否可用
    Before与After区别:
    before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。
    对于INSERT语句, 只有NEW是合法的;
    对于DELETE语句,只有OLD才合法;
    对于UPDATE语句,NEW、OLD可以同时使用。
  2. 触发时机的before【2】前需加NO CASCADE关键字,以防触发器级联
  3. INSTEAD OF【2】是针对视图的触发器,如INSTEAD OF Delete 表示任何对该视图的Delete操作都将转为执行触发器的代码。【INSTEAD OF触发器中不能有WHEN,因为她是无条件触发的。】
  4. 使用【2】BEFORE时,内容不能对其他表进行DML操作(例如insert,update,delete)
上一篇 下一篇

猜你喜欢

热点阅读