一.触发器语法
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. Before;after
指定在什么时候被触发。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 ATOMIC;END
当触发器的核心语句超过一句是,要用BEGIN ATOMIC;END
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