DB2触发器使用

由于公司项目的需要,让我这个对db2一点不通的人来写个触发器。没办法,查资料,现在终于有点小成果,记录下。

在触发器上右击->创建,出现下面界面
[img]http://dl.iteye.com/upload/attachment/159923/9b2e98ff-01f5-30c0-a64a-280d89bd1ca5.jpg[/img]
创建触发器的名字,选择表视图模式,表视图名称
[img]http://dl.iteye.com/upload/attachment/159925/605bd57b-558a-3b1e-b53c-323a51a2fe7b.png[/img]

[img]http://dl.iteye.com/upload/attachment/159927/54128196-2723-3f98-8a45-a0a714596f5d.jpg[/img]

选择已触发操作,出现界面

[img]http://dl.iteye.com/upload/attachment/159934/b5d3cfcb-99c3-3216-b4f0-c95df65906a1.jpg[/img]


由于之前选择执行触发操作是插入,所以只有新行相关名,在下面的已触发的操作里面写触发语句,触发器的语句要求比较严格,有很多的限制。

贴一个最简单的例子

/*
作用:当dest表的字段ziduan1的值>110的话,向src表中插入数据120,120,120,否则抛出错误,错误编号好像必须是5位
*/

CREATE TRIGGER ADMINISTRATOR.TRIGGER_DEST AFTER INSERT ON ADMINISTRATOR.DEST REFERENCING NEW AS NEWROW FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
DECLARE NEWSTR VARCHAR(22);
SET NEWSTR=NEWROW.ZIDUAN1;
IF (NEWSTR>110) THEN insert into src values('120','120','120'); ELSE SIGNAL SQLSTATE '22222' ('UNSECCFULL'); END IF;
END
结果如下:

[img]http://dl.iteye.com/upload/attachment/159940/ebdad238-fd58-3da8-b2e8-c8c5d05eb8f3.jpg[/img]

点击确定就成功。


在试验的过程中也遇到了很多的问题,
1:BEFORE 触发器中触发的 SQL 语句不能包括:

- 修改 SQL 数据的表函数

- 嵌套的 DELETE、INSERT、MERGE 或 UPDATE 语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值