首页 > 解决方案 > Java SQL 连接和触发器——不同的连接(clientContext)

问题描述

我有一个用一些数据设置 clientContext 的 Java 代码:

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
            String url = "some connection";

            java.util.Properties prop = new java.util.Properties();
            prop.put("user","user");
            prop.put("password","password");

            oracle.jdbc.OracleConnection conn = (oracle.jdbc.OracleConnection)(new oracle.jdbc.OracleDriver()).connect(url,prop);

            String CLIENTCONTEXT = "CLIENTCONTEXT";
            String attribute = "UpdatingUserName";
            String value = "code for getting db username";

            conn.setApplicationContext(CLIENTCONTEXT, attribute, value);
            conn.close();

当我通过 Hibernate 将一些数据插入数据库时​​,此代码示例运行。

我也有这个触发器:

CREATE OR REPLACE TRIGGER ADD_UPDATING_LOG
    AFTER INSERT
    ON PERSONS
DECLARE
    v_username varchar2(30);
BEGIN
    SELECT SYS_CONTEXT('CLIENTCONTEXT', 'UpdatingUserName') INTO v_username
    FROM dual;
    INSERT INTO PERSONS_LOG (username, log_date) VALUES (v_username, CURRENT_DATE);
END;

ALTER TRIGGER ADD_UPDATING_LOG ENABLE;

这应该得到我之前在 Java 代码中设置的 clientContext 并使用它。问题是 clientContext 仅通过一个会话起作用。我有两个不同的连接——Java 连接和触发器连接。因此,当调用触发器时,我在 Java 代码中设置的 clientContext 值不再保留。

有什么想法可以使这两个会话合二为一,或者在调用触发器时以任何其他方式使 clientContext 仍然存在?

标签: sqloracleclientcontext

解决方案


推荐阅读