DB2 trigger中一个令我恼火的问题

一共是2张表,T_DEPARTMENT(id,name,sum).部门信息,其中sum项存部门内员工数量。
                           T_PERSON(id,name,department_id)员工信息,其中department_id为员工所在部门ID.
要对T_PERSON进行insert,update,delete的操作的时候,同时修改T_DEPARTMENT中的sum.
故我写了3个trigger
1)增加一个部门的员工:
CREATE   TRIGGER   DBTRIGGER.decrease_sum   AFTER     insert     ON   DBTRIGGER.t_person 
referencing   new   as   n   FOR   EACH   ROW     MODE   DB2SQL 
update   DBTRIGGER.t_department as a   set     a.sum=a.sum + 1 
where   a.id=n.department_id ;
2)删除一个部门的员工:
CREATE   TRIGGER   DBTRIGGER.decrease_sum   AFTER     delete     ON   DBTRIGGER.t_person 
referencing   old   as   n   FOR   EACH   ROW     MODE   DB2SQL 
update   DBTRIGGER.t_department as a   set     a.sum=a.sum - 1 
where   a.id=n.department_id ;
3)修改一个员工的部门:
CREATE   TRIGGER   DBTRIGGER.update_sum   AFTER   UPDATE OF  DEPARTMENT_ID   ON   DBTRIGGER.t_person  referencing   old   as  oldrow new as newrow  FOR EACH ROW MODE DB2SQL  BEGIN ATOMIC update   DBTRIGGER.t_department as a   set     a.sum=a.sum - 1  where   a.id=oldrow.department_id ;update   DBTRIGGER.t_department as a   set     a.sum=a.sum + 1  where   a.id=newrow.department_id ;END
其中在写第3个关于update的操作时,出现了奇怪的问题:
我一开始的时候,写的trigger为:
CREATE   TRIGGER   DBTRIGGER.update_sum   AFTER   UPDATE OF  DEPARTMENT_ID   ON   DBTRIGGER.t_person 
referencing   old   as  oldrow new as newrow  FOR   EACH   ROW     MODE   DB2SQL 
BEGIN ATOMIC
update   DBTRIGGER.t_department as a   set     a.sum=a.sum - 1  where   a.id=oldrow.department_id ;
update   DBTRIGGER.t_department as a   set     a.sum=a.sum + 1  where   a.id=newrow.department_id ;
END
但是出现错误:
/*************************************************************************************************************/
CREATE   TRIGGER   DBTRIGGER.update_sum   AFTER   UPDATE OF  DEPARTMENT_ID   ON   DBTRIGGER.t_person  referencing
   old   as  oldrow new as newrow  FOR   EACH   ROW     MODE   DB2SQL 
BEGIN ATOMIC
update   DBTRIGGER.t_department as a   set     a.sum=a.sum - 1  where   a.id=oldrow.department_id
DB21034E  该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N  在 "oldrow.department_id" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"<delim_semicolon>"。  LINE NUMBER=3.
SQLSTATE=42601
update   DBTRIGGER.t_department as a   set     a.sum=a.sum + 1  where   a.id=newrow.department_id
DB21034E  该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0206N  "NEWROW.DEPARTMENT_ID" 在使用它的上下文中无效。  SQLSTATE=42703
/**************************************************************************************************************/
我用了很多方法测试,只要是在begin end 之间只加一个sql语句的也不成功.从网上看了些出错的雷同情况,初步断定是分隔符的问题,但是我在
我的语句的后面加上@符号也是相同的结果.
最后的解决办法就是,把3这个trigger写到一行里去,去掉所有的回车换行符.OK!成功!
这个问题让我困饶了3个多小时!郁闷!不知道是我对DB2不熟悉还是DB2确实不如ORACLE灵活,反正用着真别扭.
网上有人说的用DB2命令控制台来执行,db2 -td@ -vf <文件名>.
我也试验过了,但是不知道把我的文件拷到哪里去执行 .我输入命令 db2=> -td@ -vf C:/db2.txt时,只报错,"/"符号错误,不知道原因,如果有
哪位达人看到了,希望能帮我解释一下.Thanks.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值