sql - 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 仍然存在?
解决方案
推荐阅读
- javascript - lodash 节流 - 绑定时未调用函数
- python - 生成一个数字列表——一般来说哪个更好?
- java - 子点击侦听器在可展开列表视图中不起作用
- ruby-on-rails - 无法写入未知属性“parent_id”、has_one 和 belongs_to
- apache-kafka - 读取 ksql 中的管道分隔值
- javascript - 通过替换在另一个对象中找到的属性名称来创建新对象
- django - Django - 注释多个 Sum() 对象会给出错误的结果
- spring - 无法读取配置属性
- sqlite - 无法使用带有 QML 事务的 Qt 删除 SQLite 数据库
- mysql - 为什么 Mysql 8.0.19 解释显示查询没有在“where tinyint”上使用索引,但“where tinyint = true”使用了索引