更新错误后的 DB2 触发器
Posted
技术标签:
【中文标题】更新错误后的 DB2 触发器【英文标题】:DB2 trigger after update error 【发布时间】:2013-04-08 07:04:05 【问题描述】:这是我第一次使用 php 在我的网站上使用触发器。我想要实现的是当条件和位置字段(位于库存表中)更新时,触发器将向 LOG 表插入一行。
这是我修改条件和位置字段时显示的错误:
SQL0723N An error occurred in a triggered SQL statement in trigger "DB2ADMIN.CONDITI".
Information returned for the error includes SQLCODE "-433",
SQLSTATE "22001" and message tokens "Condition changed from bad ". SQLSTATE=09000 SQLCODE=-723
这是我的触发器代码,我使用数据工作室创建了触发器,并且成功了:
我已经编辑了触发代码和日志表结构,但仍然产生相同的错误
CREATE TRIGGER DB2ADMIN.CONDITION_LOG AFTER UPDATE OF CONDITION, LOCATION ON DB2ADMIN.INVENTORY
REFERENCING OLD AS o NEW AS n
FOR EACH ROW MODE DB2SQL NOT SECURED
INSERT INTO LOG VALUES ('',CURRENT TIMESTAMP, o.CONDITION, n.CONDITION, o.LOCATION, n.LOCATION);
【问题讨论】:
我认为你的查询设计不好.. 最后一列的数据过长。检查最后一列的长度以及您在查询期间尝试插入的数据。 @Meherzad 最后一列的长度是 1000 个字符,应该足够了 那么没关系...刚刚查看了您提供的错误代码找到了这个原因..... SQL0433 SQLCODE -433 SQLSTATE 22001Explanation: Significant digits truncated during CAST from numeric to character.
其实我不是从数字转换为字符,条件和位置是一个字符
【参考方案1】:
这是一个示例 UPDATE TRIGGER
这可能无法回答您的问题,但我认为它可以帮助您构建更好的触发器语句:
DELIMITER $$
CREATE
TRIGGER `blog_after_update` AFTER UPDATE
ON `blog`
FOR EACH ROW BEGIN
IF NEW.deleted THEN
SET @changetype = 'DELETE';
ELSE
SET @changetype = 'EDIT';
END IF;
INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype);
END$$
DELIMITER ;
资源链接(source)
【讨论】:
以上是关于更新错误后的 DB2 触发器的主要内容,如果未能解决你的问题,请参考以下文章