db2 触发器

1)  DB2触发器有三种
    NO CASCADE BEFORE;AFTER;INSTEAD OF
    我想实现对一个表插入前先插入另一个表的记录
    CREATE TRIGGER default_time
       NO CASCADE BEFORE INSERT ON inventory
       REFERENCING NEW AS n
       FOR EACH ROW
       MODE DB2SQL
       INSERT INTO sold
          VALUES (n.product_ID, n.daysold, o.quantity - n.quantity)

结果居然显示:
SQL0797N用不受支持的触发SQL语句定义了触发器,SQLSTATE=42987

 

 

 BEFORE 触发器还可以包括下列已触发的 SQL 语句:

    -   调用不修改 SQL 数据的 CALL 语句

    -   全查询

    -   赋值语句



     但是,BEFORE 触发器中触发的 SQL 语句不能包括:

    -   修改 SQL 数据的表函数

    -   嵌套的 DELETE、INSERT、MERGE 或 UPDATE 语句

 

2)   在CLP中创建存储过程时,若使用
     db2 create procedure p_salary (in pid int, out pname varchar(30) )
       language sql
       p1: begin
       declare tempname varchar(10);
       select empname into tempname
                 from salarytable
                 where empid=pid;
       set  pname=tempname||'a'||tempname;
end p1

总是返回:
SQLSTATE 42601 ''a''不是内部命令,也不是可运行的程序或批处理文件。''tempname''不是内部命令,也不是可运行的程序或批处理文件。
好像是连接符||出了问题
如果把最后一句改为:
set  pname=tempname就胜利通过

 

||不行的话,用concat试试

 

 

 

3) DB2的触发器和ORACLE有什么不一样的地方

 

Oracle 的限制



db2 可以2M大

db2 没有mutating tables的限制,比如,你完全可以有下面这样的trigger



 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13165828/viewspace-607158/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13165828/viewspace-607158/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值