早上好。我正在使用 SQL Anywhere 16。我有一个插入前触发器,需要在其中修改一些数据。如何引用插入记录的字段来更改数据?根据文档,“REFERENCING NEW 子句允许您在插入或更新操作发生之前修改 BEFORE 触发器中的新行。”如何实现这一点?
我将以下触发器添加到数据库中。当调用它时,我收到错误“未找到表'NEWTRANVAL'。
CREATE TRIGGER TRANVALDateGL
BEFORE INSERT ON TRANVAL
REFERENCING NEW AS NEWTRANVAL
FOR EACH ROW
BEGIN
DECLARE @GLStatus INT;
SELECT GLSTATUS INTO @GLStatus FROM NEWTRANVAL;
IF @GLSTATUS = 10223716 OR @GLSTATUS = 10223718 OR @GLSTATUS = 10223719 THEN
BEGIN
SET NEWTRANVAL.DateGL=SQLToJulian(GetDate());
END
ELSE
BEGIN
SET NEWTRANVAL.DateGL = 0;
END
END IF;
END;
谢谢您的帮助!
我的错误出在 SELECT 语句上。这是不需要的。万一其他人碰到了,这个,这是正确的触发代码。
CREATE TRIGGER TRANVALDateGLInsert
BEFORE INSERT ON TRANVAL
REFERENCING NEW AS NEWTRANVAL
FOR EACH ROW
BEGIN
IF NEWTRANVAL.GLSTATUS = 10223716 OR NEWTRANVAL.GLSTATUS = 10223718 OR NEWTRANVAL.GLSTATUS = 10223719 THEN
BEGIN
SET NEWTRANVAL.DateGL=SQLToJulian(GetDate());
END
ELSE
BEGIN
SET NEWTRANVAL.DateGL = 0;
END
END IF;
END;
GO