2009-06-23 47 views

回答

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; 

只要PL/SQL對象沒有AUTHID CURRENT_USER,它就會工作。

+0

哇。我知道這一點,但期望它返回當前用戶,而不是該函數運行的用戶。謝謝! – 2009-06-24 12:39:08

1

可能有一種更簡單的方法,但您可以使用dbms_utility.format_call_stack並解析結果以獲取模式名稱。這在Oracle 9i中可用。

+0

Oracle 11不會在錯誤消息中顯示用戶。 – Victor 2017-10-26 11:46:09

6

來自Oracle 10g CURRENT_USER,如Gary Myers' answer中所用,已被棄用。 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; 
+0

這沒什麼不同,但有一些不同的原因,我不喜歡其他答案。 1.您無需從雙選中選擇一個變量,只需指定它即可。 2. CURRENT_USER [已棄用](http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm)。 3. CURRENT_SCHEMA和SESSION_USER之間存在細微而鮮明的差異。 – 2013-02-02 12:21:16