0

想知道是否有人可以帮助我了解 DB2 before insert 触发器的行为方式。我有一个将行插入 DB2 数据库的 Grails 应用程序。有问题的表有一个插入前触发器,用于更新日期和用户以进行更新:

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 和密码来建立与数据库的连接。出于审计目的,我需要将用户的值设置为登录到应用程序的任何人。是完全删除触发器并确保它已设置的唯一解决方案吗?

4

1 回答 1

0

DB2USER变量(也称为“特殊寄存器”)包含当前数据库连接的授权 ID。如果应用程序希望将另一个用户 ID 传递给 DB2,它可以通过调用 API 函数sqleseti()或存储过程来实现WLM_SET_CLIENT_INFO()——更多信息在这里。然后触发器可以引用另一个特殊寄存器CURRENT CLIENT_USERID.

于 2013-05-22T01:07:28.870 回答