SQL Anywhere BEFORE INSERT 触发器

问题描述 投票:0回答:1

早上好。我正在使用 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;

谢谢您的帮助!

triggers
1个回答
0
投票

我的错误出在 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
© www.soinside.com 2019 - 2024. All rights reserved.