Удивление, может ли кто-нибудь помочь мне понять, как ведет себя триггер DB2 перед вставкой. У меня есть приложение Grails, которое вставляет строки в базу данных DB2. В таблице в вопросе имеет перед вставкой триггера, который обновляет дату и пользователь для обновления:DB2 Before Update Trigger Behavior
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 я установил все значения, включая идентификатор пользователя:
flatAdjustmentInstance.setUserID("TS37813")
Мы используем общий идентификатор приложения и пароль через JNDI для подключения к базе данных. Для целей аудита мне нужно установить значение пользователя для входа в приложение. Единственное решение полностью удалить триггер и просто быть уверенным, что оно установлено?
Вы задаете вопрос, неясно, можете ли вы подробнее рассказать? – dmahapatro
В частности, я ищу, чтобы переопределить значение, используемое триггером для установки поля user_id. Я бы подумал, что, поскольку это предварительное обновление, оно будет использовать входящее значение, однако значение не будет изменено. –
Да, в этом случае я думаю, что вы избавились от триггера, так как Trigger будет использовать информацию о пользователе из соединения, которое будет «applicationID» в вашем случае. Это будет немного обобщением, но вы можете добавить логику в триггер, чтобы проверить, уже ли отправлен user_id из приложения, и не устанавливайте идентификатор пользователя приложения в Trigger. Это моя теория, чтобы убедиться, что вы не выбрасываете курок. :) – dmahapatro