Grails DB2更新前触发器行为

Grails DB2更新前触发器行为,grails,db2,gorm,Grails,Db2,Gorm,想知道是否有人能帮助我理解DB2 before insert触发器的行为。我有一个将行插入DB2数据库的Grails应用程序。该表有一个before insert触发器,用于更新更新的日期和用户: CREATE TRIGGER WTESTP.SCSMA11I NO CASCADE BEFORE INSERT ON WTESTP.SCSMA01T REFERENCING NEW AS NEWROW FOR EACH ROW MODE DB2SQL BEGIN ATOMIC SET NEWROW

想知道是否有人能帮助我理解DB2 before insert触发器的行为。我有一个将行插入DB2数据库的Grails应用程序。该表有一个before insert触发器,用于更新更新的日期和用户:

CREATE TRIGGER WTESTP.SCSMA11I NO CASCADE BEFORE INSERT ON 
WTESTP.SCSMA01T REFERENCING NEW AS NEWROW FOR EACH ROW MODE 
DB2SQL BEGIN ATOMIC SET NEWROW.LST_UPDT_TMSP = 
CURRENT_TIMESTAMP ; SET NEWROW.USER_ID = RTRIM ( USER ) ; END ;
在我的Grails应用程序中,我设置了所有值,包括用户id:

flatAdjustmentInstance.setUserID("TS37813")

我们通过JNDI使用通用的应用程序ID和密码来连接数据库。出于审核目的,我需要将用户的值设置为登录应用程序的用户。是否唯一一个完全删除触发器的解决方案,只是要确保它已经设置好

DB2
USER
变量(也称为“特殊寄存器”)包含当前数据库连接的授权ID。如果应用程序希望向DB2传递另一个用户ID,则可以通过调用API函数
sqleseti()
或存储过程
WLM\u SET\u CLIENT\u INFO()
--。然后触发器可以引用另一个特殊寄存器,
当前客户端用户id

您的问题有点不清楚,您能详细说明一下吗?具体来说,我希望覆盖触发器用于设置用户id字段的值。我认为,由于这是一个更新之前的版本,它将使用传入值,但是该值没有更改。是的,在这种情况下,我认为您已经删除了触发器,因为触发器将使用连接中的用户信息,在您的情况下,该连接将是
applicationID
。这将有点泛化,但您可以在触发器中添加一个逻辑来检查是否已经从应用程序发送了用户id,然后不要在触发器中设置应用程序用户id。这是我的理论,只是为了确保你没有扔掉扳机