DB2更新之前的触发器行为

时间:2013-05-21 17:30:42

标签: grails db2 gorm

想知道是否有人可以帮助我理解插入触发器之前DB2的行为方式。我有一个Grails应用程序,它将行插入DB2数据库。有问题的表有一个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和密码来建立与数据库的连接。出于审计目的,我需要将用户的值设置为登录应用程序的任何人。是完全删除触发器的唯一解决方案,只是确定它已设置?

1 个答案:

答案 0 :(得分:0)

DB2 USER变量(也称为“特殊寄存器”)包含当前数据库连接的授权标识。如果应用程序希望将另一个用户标识传递给DB2,则可以通过调用API函数sqleseti()或存储过程WLM_SET_CLIENT_INFO() - more info here来完成此操作。然后触发器可以引用另一个特殊寄存器CURRENT CLIENT_USERID