Oracle Java存储过程想知道谁是调用方?

Oracle Java存储过程想知道谁是调用方?,java,oracle,java-stored-procedures,Java,Oracle,Java Stored Procedures,我的Oracle数据库中有一个Java存储过程,我需要知道是谁调用了它。我想根据打电话的人做不同的事情。我在网上用谷歌搜索了一下,但是我运气不好 这是我自己的解决方案。它主要包括两个Oracle功能: (1) : SYS\u CONTEXT('USERENV','SESSION\u USER')返回登录时数据库用户的名称。该值在整个会话期间保持不变 SYS\u CONTEXT('USERENV','CURRENT\u USER')返回其权限当前处于活动状态的数据库用户的名称 根据用途,可以使用这

我的Oracle数据库中有一个Java存储过程,我需要知道是谁调用了它。我想根据打电话的人做不同的事情。我在网上用谷歌搜索了一下,但是我运气不好

这是我自己的解决方案。它主要包括两个Oracle功能:

(1) :

SYS\u CONTEXT('USERENV','SESSION\u USER')
返回登录时数据库用户的名称。该值在整个会话期间保持不变

SYS\u CONTEXT('USERENV','CURRENT\u USER')
返回其权限当前处于活动状态的数据库用户的名称

根据用途,可以使用这些功能中的任何一个或两个。在我的示例中,我将同时使用这两种方法

(2) :

服务器端内部驱动程序本质上与Oracle数据库和Java虚拟机(JVM)绑定。驱动程序与数据库作为同一进程的一部分运行。它还运行在默认会话中,即启动JVM的同一会话中

据我所知,如果没有此功能,此演示将无法运行。这是因为要运行
SYS\u CONTEXT
函数,首先需要连接到数据库。但是,在这种情况下,我将获得与连接到数据库相同的
SESSION\u用户
。另一个问题是,我将释放当前函数调用的上下文。我想要的是获取有关当前函数调用的信息。此功能为我提供了所需的功能

以下是工作示例:

class Demo{

    public static java.lang.String getUser() 
                                         throws java.sql.SQLException {

    java.sql.Statement stmt = null;
    java.sql.ResultSet rs = null;

    try{
        java.sql.Connection con = 
                java.sql.DriverManager.getConnection("jdbc:default:connection");

        java.lang.String query = 
                  "SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER')," +
                  "SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL";


        stmt  = con.createStatement();
        rs = stmt.executeQuery(query);

        rs.next();

        return "Current User: [" + rs.getString(1) + "] ; " +
               "Session User: [" + rs.getString(2) + "]";
    }
    finally{
        rs.close();
        stmt.close();
    }

    }

}
PL/SQL包装器代码:

CREATE OR REPLACE FUNCTION MyFunc
RETURN VARCHAR2
AS
LANGUAGE JAVA
NAME 'Demo.getUser() return java.lang.String';
此函数是在
SYS
下创建的,函数上的
EXECUTE
权限被授予
SCOTT

以下是执行结果:

MYFUNC
----------------------------------
Current User: [SYS] ; Session User: [SCOTT]

我的Oracle数据库中的Java存储过程?看看这些:你需要知道谁是谁?@AlfredoFerreira我在当前执行的上下文中需要这些信息。我觉得有些奇怪。首先,你发布了一个问题,上面写着“我在网上搜索了它,但没有运气”,3分钟后,你发布了一个关于你自己问题的详细答案?