db2的insert触发器 总是报错,请高手帮忙看看什么原因吧!

时间:2022-06-22 05:00:47
CREATE TRIGGER DB2INST1.insertstatus
AFTER INSERT ON
DB2INST1.sms_send
REFERENCING NEW AS nrow
FOR EACH ROW  MODE DB2SQL
BEGIN ATOMIC
declare cont varchar(3000);
if nrow.status=1
then
set cont=(select smscontent from DB2INST1.t_smscontent as s where s.smscontent_id=nrow.smscontent_id);
insert into DB2INST1.TBL_SMsendtask(CREATORID, SMSENDEDNUM,OPERATIONTYPE,SUBOPERATIONTYPE,SENDTYPE,ORGADDR,DESTADDR,SM_CONTENT,
SENDTIME,NEEDSTATEREPORT,SERVICEID,FEETYPE,FEECODE,SMTYPE,MESSAGEID,DESTADDRTYPE,SUBTIME,TASKSTATUS,SENDLEVEL,SENDSTATE,
TRYTIMES,COUNT,SUCCESSID,RESERVE1,RESERVE2) VALUES('0000',0,'WAS','66',1,'106573060067'+nrow.orgnum,nrow.receivetell,cont,nrow.sendtime,0,'MSD2210201','01','0',0,'0',0,CURRENT TIMESTAMP,0,2,0,3,33,0,'0','0');
END IF;
end




报错信息如下:
CREATE TRIGGER DB2INST1.insertstatus
AFTER INSERT ON
DB2INST1.sms_send
REFERENCING NEW AS nrow
FOR EACH ROW  MODE DB2SQL
BEGIN ATOMIC
declare cont varchar(3000)
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N  在 "re cont varchar(3000" 后面找到异常标记
")"。预期标记可能包括:"END-OF-STATEMENT"。  LINE NUMBER=7.  SQLSTATE=42601

if(nrow.status=1) then set cont=(select smscontent from DB2INST1.t_smscontent as s where s.smscontent_id=nrow.smscontent_id)
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N  在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "if(nrow.status=1)
then"。预期标记可能包括:"<create_proc>"。  SQLSTATE=42601

insert into DB2INST1.TBL_SMsendtask(CREATORID, SMSENDEDNUM,OPERATIONTYPE,SUBOPERATIONTYPE,SENDTYPE,ORGADDR,DESTADDR,SM_CONTENT, SENDTIME,NEEDSTATEREPORT,SERVICEID,FEETYPE,FEECODE,SMTYPE,MESSAGEID,DESTADDRTYPE,SUBTIME,TASKSTATUS,SENDLEVEL,SENDSTATE, TRYTIMES,COUNT,SUCCESSID,RESERVE1,RESERVE2) VALUES('0000',0,'WAS','66',1,'106573060067'+nrow.orgnum,nrow.receivetell,cont,nrow.sendtime,0,'MSD2210201','01','0',0,'0',0,CURRENT TIMESTAMP,0,2,0,3,33,0,'0','0')
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0206N  "NROW.ORGNUM" 在使用它的上下文中无效。  SQLSTATE=42703

END IF end
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N  在 "END " 后面找到异常标记 "IF"。预期标记可能包括:"JOIN
<joined_table>"。  SQLSTATE=42601

SQL0104N  在 "END " 后面找到异常标记 "IF"。预期标记可能包括:"JOIN <joined_table>                                           "。

说明: 

在文本 "<文本>" 后面的指定标记处检测到 SQL 语句中或 SYSPROC.ADMIN_CMD 
过程的输入命令字符串中的语法错误。"<文本>" 字段指示无效标记前面的 SQL 
语句中或 SYSPROC.ADMIN_CMD 过程的输入命令字符串的 20 个字符。

作为帮助,在 SQLCA 的 SQLERRM 字段中,提供了有效标记的部分列表作为 "<标
记列表>"。此列表假设语句到该位置为止是正确的。

不能处理该语句。

用户响应: 

在指定的标记区域内检查并更正语句。

  sqlcode:  -104

  sqlstate:  42601






现在把所有的逻辑都去掉,光写句声明也不行!
CREATE TRIGGER DB2INST1.insertstatus
AFTER INSERT ON
DB2INST1.sms_send
REFERENCING NEW AS nrow
FOR EACH ROW  MODE DB2SQL
BEGIN ATOMIC
declare cont varchar(30);
END

CREATE TRIGGER DB2INST1.insertstatus
AFTER INSERT ON
DB2INST1.sms_send
REFERENCING NEW AS nrow
FOR EACH ROW  MODE DB2SQL
BEGIN ATOMIC
declare cont varchar(30)
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N  在 "lare cont varchar(30" 后面找到异常标记
")"。预期标记可能包括:"END-OF-STATEMENT"。  LINE NUMBER=7.  SQLSTATE=42601

END
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N  在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN
<joined_table>"。  SQLSTATE=42601

SQL0104N  在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>    

5 个解决方案

#1


现在基本没错了 就一个点过不去了 就是插入语句那里那个‘10657……’+orgnum这里 总提示+号有问题!!

#2


我解决了 呵呵 大家有类似情况出现 就发帖吧 呵呵

#3


把错误原因直接分享一下吧

#4


db2的insert触发器 总是报错,请高手帮忙看看什么原因吧!

#1


现在基本没错了 就一个点过不去了 就是插入语句那里那个‘10657……’+orgnum这里 总提示+号有问题!!

#2


我解决了 呵呵 大家有类似情况出现 就发帖吧 呵呵

#3


把错误原因直接分享一下吧

#4


db2的insert触发器 总是报错,请高手帮忙看看什么原因吧!