如何将任意参数发送到Oracle触发器?
目的是从 Web 应用程序向触发器(如当前用户 ID)发送额外信息。由于使用了连接池,并且所有连接都使用相同的用户ID,那么如何传递原始Web用户ID来触发?这需要在不接触应用程序代码的情况下实现。它是一个基于java的应用程序。
John
目的是从 Web 应用程序向触发器(如当前用户 ID)发送额外信息。由于使用了连接池,并且所有连接都使用相同的用户ID,那么如何传递原始Web用户ID来触发?这需要在不接触应用程序代码的情况下实现。它是一个基于java的应用程序。
John
可以使用 client_identifier 会话变量将应用程序用户传递给触发器。
在连接到数据库后设置它,如下所示:
CALL dbms_session.set_identifier('<<username>>');
并在触发器内检索它:
SELECT sys_context('USERENV','CLIENT_IDENTIFIER') INTO username FROM DUAL;
更多信息可以在 Oracle 文档中找到
你可以使用Oracle Contexts:
SQL> CREATE OR REPLACE PACKAGE test_pkg AS
2 PROCEDURE set_context(p_attribute VARCHAR2, p_value VARCHAR2);
3 END test_pkg;
4 /
Package created
SQL> CREATE OR REPLACE PACKAGE BODY test_pkg AS
2 PROCEDURE set_context(p_attribute VARCHAR2, p_value VARCHAR2) IS
3 BEGIN
4 dbms_session.set_context('test_ctx', p_attribute, p_value);
5 END;
6 END test_pkg;
7 /
Package body created
SQL> create context test_ctx using test_pkg;
Context created
SQL> exec test_pkg.set_context ('user_id', 'Vincent');
PL/SQL procedure successfully completed
SQL> select sys_context('test_ctx', 'user_id') from dual;
SYS_CONTEXT('TEST_CTX','USER_I
--------------------------------------------------------------------------------
Vincent