DB2 Before Update Trigger Behavior

你。 提交于 2019-12-12 03:43:03

问题


Wondering if someone can help me understand how a DB2 before insert trigger behaves. I have a Grails app that inserts rows to a DB2 database. The table in question has a before insert trigger that updates the date and user for the update:

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 ;

In my Grails application I set all the values, including the user id:

flatAdjustmentInstance.setUserID("TS37813")

We use a generic application ID and password via JNDI to make the connection to the database. For auditing purposes I need to set the value of the user to whomever logged into the application. Is the only solution to remove the trigger entirely and just be really sure it is set?


回答1:


The DB2 USER variable (also called "special register") contains the authorization ID of the current database connection. If an application wishes to pass another user ID to DB2, it can do so by calling the API function sqleseti() or the stored procedure WLM_SET_CLIENT_INFO() -- more info here. The trigger can then reference another special register, CURRENT CLIENT_USERID.



来源:https://stackoverflow.com/questions/16676050/db2-before-update-trigger-behavior

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!