DB2触发器

一.触发器语法

   create trigger [触发器名,必须]

   [触发器类型,必须,no cascade before/after/instead of][触发类型,必须,insert/select/update/delete] on [表名,必须]

   [for each row/for each statement] mode DB2SQL

   Begin atomic

       ......

   End

 

1.  Beforeafter

指定在什么时候被触发。Before前面一定要有NO CASCADE

2.  FOR EACH ROW FOR EACH STATEMENT

FOR EACH ROW是指触发器在操作每一行时被激活;

FOR EACH STATEMENT是指在执行每条SQL语句时被激活;

因此如果有一条SQL语句要修改10跳记录,则FOR EACH ROW要运行10此,而FOR EACH STATEMENT只运行一次。

3.  MODE DB2SQL

指定的语句。

4.  BEGIN ATOMICEND

当触发器的核心语句超过一句是,要用BEGIN ATOMICEND

5.  结束。

如果满足条件,运行完成。

不满足条件,SIGNAL SQLSTATE '80000' ('Order Exceeds credit line')用来使触发器报错,当前操作不能完成。

SIGNAL SQLSTATE '80000' 是系统的错误,该错误可由应用程序恢复,'Order Exceeds credit line'是错误信息,70个字节以内。

6. INSTEAD OF

INSTEAD OF是针对视图的触发器,如INSTEAD OF Delete 表示任何对该视图的Delete操作都将转为执行触发器的代码。

注意:INSTEAD OF触发器中不能有WHEN,因为她是无条件触发的。

二.注意格式:

  

在开发中,我遇到了匪夷所思的错误,如:

Create trigger exmple

No cascade before insert on td1

Referencing new as n

For each row mode db2sql

Begin atomic

Select * from td1;

Select tid from td1;

End

这样写铁定是要报错的!要到”;”前再换行!

Create trigger exmple no cascade before insert on td1 referencing new as n for each row mde db22sql ----- 这是一行

Begin atomic Select * from td1

;select tid from td1

;end

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值