【发布时间】:2016-03-09 19:16:53
【问题描述】:
比较简单的问题。我正在尝试在调整 firebird 触发器上的 INSERT 值之前执行语句并检查值。我已经看到了许多示例,其中评估了新值,然后执行了后续语句,但没有我想要的。更容易显示...
SET TERM ^ ;
CREATE TRIGGER STOP_PREMIX_INSERT_PRODUCEDD FOR PRODUCEDD ACTIVE
BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
IF ('SELECT COUNT(*) FROM RECIPESTEPS rs INNER JOIN RECIPES r on r.RECIPEID=rs.RECIPEID INNER JOIN PRODUCEDH h on h.RECIPEID=r.RECIPEID WHERE h.BATCHID=' || new.BATCHID || ' AND ' || new.SEQUENCENO || '=rs.SEQUENCENO AND ' || new.COMMODITYID || '=rs.COMMODITYID AND rs.NONWEIGHED=17;' > 0) then
new.BATCHID=-1;
END^
SET TERM ; ^
在对新条目执行值更改之前,我正在尝试验证另一个表中是否存在一条数据。
通常 IF (new.ID = 0) 然后执行语句 'blah';会起作用,但是当我编写此触发器时,它在语法上被接受,但是当值更改时,我收到以下错误消息:
算术异常、数值溢出或字符串截断 字符串右截断 在触发 'STOP_PREMIX_INSERT_PRODUCECEDD' 行:6,列:5
我可能是一个分号,或者这可能是不可能的,无论哪种方式,任何帮助表示赞赏。
【问题讨论】:
-
我不知道 Firebird,但看起来您正在检查 SQL 字符串是否大于零。也许您需要执行字符串并比较结果?