如何从函数中确定PL/SQL函数的模式

Jer*_*que 7 oracle plsql

我在Oracle 10g数据库中有一个PL/SQL包,我想编写一个函数,它返回包(以及函数)定义的模式的名称.任何人都知道如何做到这一点?

Gar*_*ers 7

create function xcurr return varchar2 is
  v_curr varchar2(32);
begin
  SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') into v_curr from dual;
  return v_curr;
end;
Run Code Online (Sandbox Code Playgroud)

只要PL/SQL对象没有AUTHID CURRENT_USER,这就可以工作.


Tom*_* W. 6

来自Oracle 10g CURRENT_USER,在Gary Myers的回答中使用,已被弃用.Oracle建议您改为使用SESSION_USER参数,其中:

对于企业用户,返回架构.对于其他用户,返回用于对当前用户进行身份验证的数据库用户名.该值在整个会话期间保持不变.

我会使用CURRENT_SCHEMA.如果发出ALTER SESSION SET CURRENT_SCHEMA语句,则两者之间存在细微差别,因为CURRENT_SCHEMA会发生更改.

也没有必要从双重选择; 您可以将SYS_CONTEXT的返回值直接赋给变量.

DECLARE
    v_current_schema varchar2(30);
BEGIN
    v_current_schema := SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA');
    dbms_output.put_line('I am using the schema [' || v_current_schema || ']');
END;
Run Code Online (Sandbox Code Playgroud)