想知道是否有人可以帮助我理解插入触发器之前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和密码来建立与数据库的连接。出于审计目的,我需要将用户的值设置为登录应用程序的任何人。是完全删除触发器的唯一解决方案,只是确定它已设置?
答案 0 :(得分:0)
DB2 USER
变量(也称为“特殊寄存器”)包含当前数据库连接的授权标识。如果应用程序希望将另一个用户标识传递给DB2,则可以通过调用API函数sqleseti()
或存储过程WLM_SET_CLIENT_INFO()
- more info here来完成此操作。然后触发器可以引用另一个特殊寄存器CURRENT CLIENT_USERID
。