触发器问题

baobeizhu100 2011-08-01 02:09:48
我建了个触发器,调试的时候发现如果v_wsbjbs=1的时候,触发器会报错,不知道为什么,后来我把
if v_wsbjbs=1 then
delete msh_zswsbj where jcfl=n.DQJCFL AND CBJSBS=n.DQJCZT;
end if;
这一段注掉,就不报错了,可是我想在这个触发器里实现删除msh_zswsbj表数据,同时又插入 HIS_VOYAGEHISTORY表,该如何写呢?

报错:Category Timestamp Message
Statusbar 2011/8/1 14:10:27 DB2 Database Error: ERROR [09000] [IBM][DB2/LINUXX8664] SQL0723N An error occurred in a triggered SQL statement in trigger "DB2INST1.TR_TO_H". Information returned for the error includes SQLCODE "-746", SQLSTATE "57053" and message tokens "DB2INST1.TR_TO_HIS_VOYAG|SQL11080114155737". SQLSTATE=09000



CREATE TRIGGER TR_TO_HIS_VOYAGEHISTORY_INSERT
AFTER INSERT
ON MSH_VOYAGEINFO
REFERENCING
NEW AS n
FOR EACH ROW
begin

declare v_djzs varchar(120) default'';
declare v_cjg varchar(60) default'';
declare v_cbgs varchar(200) default'';
declare v_cdgs varchar(200) default'';
declare v_czxm varchar(100) default'';
declare v_czgj varchar(6) default'';
declare v_cbgjqf integer default 0;
declare v_wsbjbs integer default 0;
declare v_wfwgbs integer default 0;


set v_djzs=(select djzs from MSH_SHIPBASEINFO a where a.mmsi=n.cbdh);
set v_cjg=(select cjg from MSH_SHIPBASEINFO a where a.mmsi=n.cbdh);
set v_cbgs=(select cbgs from MSH_SHIPBASEINFO a where a.mmsi=n.cbdh);
set v_cdgs=(select cdgs from MSH_SHIPBASEINFO a where a.mmsi=n.cbdh);
set v_czxm=(select czxm from MSH_SHIPBASEINFO a where a.mmsi=n.cbdh);
set v_czgj=(select czgj from MSH_SHIPBASEINFO a where a.mmsi=n.cbdh);

set v_cbgjqf=fun_check_shipgjdqdm(n.GJDQDM, n.HC);
set v_wsbjbs=fun_check_shipzswsbj(n.CBJSBS, n.DQJCFL, n.DQJCZT);
set v_wfwgbs=fun_check_shipwfwg(n.gjdqdm,n.zwcbm,n.ywcbm);

/* if v_wsbjbs=1 then
delete msh_zswsbj where jcfl=n.DQJCFL AND CBJSBS=n.DQJCZT;
end if;*/

insert into HIS_VOYAGEHISTORY(
HCID,--航次
MMSI,--船舶档号
CBJSBS,--船舶检索标识
JTGJLXDM,--交通工具类型代码
CBZLDM,--船舶种类代码
ZWCBM,--船舶中文名称
YWCBM,--船舶英文名称
IMO,--IMO号
GJHH,--国际呼号
DJZS,--登记证书
CJG,--船籍港
CBGS,--船舶公司
CDGS,--船代公司
CZXM,--船长姓名
CZGJ,--船长国籍
CBGJQF,--船舶国籍
GJDQDM,--国籍地区代码
CYBGBS,--船员变更标识
ZDGZBS,--重点关注标识
DQJCFL,--当前检查分类
DQJCZT,--当前检查状态
KADM,--口岸代码
CZY,--操作员
CZBM,--操作部门
CZSJ,--操作时间
DQTKMT,--当前停码头
DQTKBW,--当前停泊位
JDXGZT,--解档修改状态
JFR,--加封人
JFSJ,--加封时间
QFR,--启封人
QFSJ,--启封时间
WQDY,--武器弹药
JFKADM,--加封口岸
QFKADM,--启封口岸
YJBZ,--优检标志
ZSWSBJBZ,--在线网上报检标志
BASEID,--总队ID
WFWGBS,--违法违规标识
CREATE_DATE,--创建时间
CREATE_USER_ID,--创建用户ID
CREATE_IP,--创建IP
CREATE_PROGRAM_ID,--创建程序ID
UPDATE_DATE,--更新时间
UPDATE_USER_ID,--更新用户
UPDATE_IP,--更新IP
UPDATE_PROGRAM_ID--更新程序ID
)
values (
n.HC --航次
,n.CBDH --船舶档号(MMSI)
,n.CBJSBS --船舶检索标识
,n.JTGJLXDM --交通工具类型代码
,n.CBZLDM --船舶种类代码
,n.ZWCBM --船舶中文名称
,n.YWCBM --船舶英文名称
,n.IMO --IMO号
,n.GJHH --国际呼号
,v_DJZS --登记证书
,v_CJG --船籍港
,v_CBGS --船舶公司
,v_CDGS --船代公司
,v_CZXM --船长姓名
,v_CZGJ --船长国籍
,v_cbgjqf --船舶国籍区分
,n.GJDQDM --国籍地区代码
,n.CYBGBS --船员变更标识
,n.ZDGZBS --重点关注标识
,n.DQJCFL --当前检查分类
,n.DQJCZT --当前检查状态
,n.KADM --口岸代码
,n.CZY --操作员
,n.CZBM --操作部门
,n.CZSJ --操作时间
,n.DQTKMT --当前停码头
,n.DQTKBW --当前停泊位
,n.JDXGZT --解档修改状态
,n.JFR --加封人
,n.JFSJ --加封时间
,n.QFR --启封人
,n.QFSJ --启封时间
,n.WQDY --武器弹药
,n.JFKADM --加封口岸
,n.QFKADM --启封口岸
,n.YJBZ --优检标志
,v_wsbjbs --网上报检标识
,null
,v_wfwgbs --违法违规标识
,sysdate --创建日期
,null
,null
,'tr_to_his_voyagehistory'
,null
,null
,null
,null);

end;
...全文
146 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaojianmi1 2011-08-01
  • 打赏
  • 举报
回复
找半天也没找到资料

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=51204
baobeizhu100 2011-08-01
  • 打赏
  • 举报
回复
我改成了 if 1=1 ,报的错误是一样的
zhaojianmi1 2011-08-01
  • 打赏
  • 举报
回复
是不是不能调用函数
zhaojianmi1 2011-08-01
  • 打赏
  • 举报
回复
改成if 1=1 会不会报错
baobeizhu100 2011-08-01
  • 打赏
  • 举报
回复
补充下,我把此触发器改写成存储过程执行是没有问题的,我感觉可能是跟事务控制方面有关系?

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧