运行触发器时出错
Posted
技术标签:
【中文标题】运行触发器时出错【英文标题】:Error when running trigger 【发布时间】:2013-10-02 13:28:41 【问题描述】:创建了以下触发器以将资产标签移动到正确的字段。
但得到一个错误。不是数据库专家。
CREATE TRIGGER HARRISOP.ASSET_TAG INSTEAD OF INSERT ON DB2ADMIN.SNMPSYS FOR EACH STATEMENT MODE DB2SQL
SELECT *
FROM DB2ADMIN.SNMPSYS AS SNMPSYS
WHERE SNMPSYS.SYSCONTACT_X = ' A330637'
INSERT INTO DB2ADMIN.CITEMPLATE (ASSETTAG_X)
VALUES (DEFAULT)
根据用户帮助的新代码。还是不行。
CONNECT TO CMDB;
CREATE TRIGGER DB2ADMIN.ASSET_TAG NO CASCADE BEFORE INSERT ON DB2ADMIN.SNMPSYS FOR EACH ROW MODE DB2SQL
REFERENCING
NEW AS N
FOR EACH ROW
MODE DB2SQL
SET N.ASSETTAG_X = SUBSTR(
N.SYSCONTACT_X,
1,
LOCATE(',', N.SYSCONTACT_X) - 1
);
CONNECT RESET;
【问题讨论】:
我真的只想在一个字段中抓取所有内容,直到 , 。 Tivoli 正在获取 SNMP 信息并将其放在位置字段中。前任。 A12345567,安大略省渥太华。我们有大量不同外观的资产,所以我只需将所有字符移到 , 移到另一个字段。再次没有数据库人员,因此将不胜感激。使用 DB2 数据库。 触发器本身和插入语句的语法都不正确。我也没有在您的 SQL 中看到任何逗号或位置字段。请用人类的语言解释你想要达到的目标。 我有一个名为 syscontact_x 的 snmp 字段。我需要将一些数据移出并移入正确的字段调用assettag_x。资产标签和当前位置文本类似于此示例。 A12345567,安大略省渥太华。我需要将 A1234567 移动到正确的字段。我想创建一个触发器,该触发器在该字段上发生插入或更新并移动数据时触发。我正在使用 DB2 并使用其内置的 SQL 辅助来创建触发器,这就是它想出的。我找不到更手动的方法来做到这一点。希望能回答你的问题。谢谢 看起来我已经完成了部分工作。只需要实际移动所选数据的帮助。连接到 CMDB; CREATE TRIGGER DB2ADMIN.ASSET_TAG NO CASCADE BEFORE INSERT ON DB2ADMIN.SNMPSYS FOR EACH ROW MODE DB2SQL SELECT SNMPSYS.SYSCONTACT_X FROM DB2ADMIN.SNMPSYS AS SNMPSYS WHERE SNMPSYS.SYSCONTACT_X LIKE '%,' 【参考方案1】:如果我正确理解你想要什么,触发器应该看起来像
CREATE TRIGGER HARRISOP.ASSET_TAG
BEFORE INSERT
ON DB2ADMIN.SNMPSYS
REFERENCING NEW AS N
FOR EACH ROW
SET N.ASSETTAG_X = SUBSTR(
N.SYSCONTACT_X,
1,
LOCATE(',', N.SYSCONTACT_X) - 1
)
您应该阅读手册中有关触发器的更多信息:http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.admin.dbobj.doc/doc/t0020225.html
【讨论】:
感谢您的回答..获取此信息。[IBM][CLI Driver][DB2/NT] SQL0104N 在“ON DB2ADMIN.SNMPSYS”之后发现了意外的标记“FOR EACH ROW MODE DB2SQL REFERENCING NEW” ”。预期的标记可能包括:“MODE DB2SQL
。注意关键词的顺序——虽然你可以先穿袜子再穿裤子,但电脑不是这样的。
是的,对不起,忽略了...正在使用 SQL 助手并将其放入。有什么想法吗?
您是否能够完全按照我提供的方式复制和粘贴代码,还是坚持在其中引入自己的语法错误?比较你运行的和我展示的。
我已经尝试过复制和粘贴,但仍然出现与上述相同的错误。DB2 自动输入了 Connect to CMDB,而我的 harrisop 不正确,应该如上所示 db2admin... 我通过右键单击该字段并选择创建触发器来创建触发器,它将自行放入。希望我没有完全混淆你。非常沮丧,这不起作用,它需要在星期一之前。谢谢以上是关于运行触发器时出错的主要内容,如果未能解决你的问题,请参考以下文章