来自 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;
}

最新更新