JAVA UDF Oracle 11g 中的用户和会话信息
User and Session info from within JAVA UDF Oracle 11g
我希望像
提供的那样获取用户信息
SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') FROM DUAL;
和
SELECT SYS_CONTEXT ('USERENV', 'OS_USER') FROM DUAL;
在 Oracle 11g 的 JAVA UDF 中,没有建立 JDBC 连接,运行 这些查询从 DUAL 查询。
我尝试System.getProperty("user.name")
通过jvm读取当前OS_user但我认为我们不允许在数据库环境之外获取信息。
更一般地说,问题陈述是获取有关已登录数据库的用户的信息并使用该 java UDF(我们需要在其中确定这些信息)?
我通过使用 "jdbc:default:connection"
找到了上述问题的解决方案,它是由数据库本身维护的内部连接,始终可用。请注意,我最后没有执行 conn.close();
,因为这是一个共享流,一旦关闭,所有数据库客户端都会关闭。
public static String doSQL() throws SQLException {
String result = new String();
String q1 = "SELECT SYS_CONTEXT('USERENV','SESSION_USER') FROM DUAL";
Connection conn =
DriverManager.getConnection("jdbc:default:connection");
PreparedStatement ps = conn.prepareStatement(
q1
);
ResultSet rs = ps.executeQuery();
while (rs.next())
result = rs.getString(1);
return "my udf says"+result;
}
我希望像
提供的那样获取用户信息SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') FROM DUAL;
和
SELECT SYS_CONTEXT ('USERENV', 'OS_USER') FROM DUAL;
在 Oracle 11g 的 JAVA UDF 中,没有建立 JDBC 连接,运行 这些查询从 DUAL 查询。
我尝试System.getProperty("user.name")
通过jvm读取当前OS_user但我认为我们不允许在数据库环境之外获取信息。
更一般地说,问题陈述是获取有关已登录数据库的用户的信息并使用该 java UDF(我们需要在其中确定这些信息)?
我通过使用 "jdbc:default:connection"
找到了上述问题的解决方案,它是由数据库本身维护的内部连接,始终可用。请注意,我最后没有执行 conn.close();
,因为这是一个共享流,一旦关闭,所有数据库客户端都会关闭。
public static String doSQL() throws SQLException {
String result = new String();
String q1 = "SELECT SYS_CONTEXT('USERENV','SESSION_USER') FROM DUAL";
Connection conn =
DriverManager.getConnection("jdbc:default:connection");
PreparedStatement ps = conn.prepareStatement(
q1
);
ResultSet rs = ps.executeQuery();
while (rs.next())
result = rs.getString(1);
return "my udf says"+result;
}