我在Oracle 10g數據庫中有一個PL/SQL包,我想編寫一個函數,該函數返回包(以及函數)定義在任何人都知道如何做到這一點?如何從功能內確定PL/SQL函數的架構
回答
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,它就會工作。
可能有一種更簡單的方法,但您可以使用dbms_utility.format_call_stack
並解析結果以獲取模式名稱。這在Oracle 9i中可用。
Oracle 11不會在錯誤消息中顯示用戶。 – Victor 2017-10-26 11:46:09
來自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;
這沒什麼不同,但有一些不同的原因,我不喜歡其他答案。 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
- 1. PLSQL-組功能的定義
- 2. 如何從正確的PLSQL
- 3. JS:範圍內構造函數功能
- 4. 如何從java中調用PLSQL函數
- 5. 函數內功能
- 6. 從函數的類型確定功能行爲
- 7. 功能函數內的函數
- 8. 函數功能不正確
- 9. 如何確定爲架構啓用或禁用哪些功能標記
- 10. 如何確定緊湊框架的哪些.Net功能?
- 11. 調用從另一個PLSQL功能
- 12. XML架構內容模型不確定
- 13. 如何正確地架構架構
- 14. 如何定位功能一個ajaxvalidation函數內部
- 15. python 3.0函數內功能
- 16. 功能函數內部函數名稱?
- 17. 如何確定分佈式架構?
- 18. PLSQL中的(+)函數
- 19. PLSQL訪問不同的架構
- 20. LISTAGG功能與PLSQL收集
- 21. PlSql轉換功能問題
- 22. 功能NHibernate架構問題
- 23. 如何制定確定性功能?
- 24. 如何確定此javascript的功能
- 25. 不確定如何返回的功能
- 26. 功能故障不在範圍內:數據構造函數
- 27. 我的功能如何連接到正確的成員函數
- 28. 如何使一個選擇從從PLSQL函數ORACLE
- 29. 如何在JavaScript對象內正確定義(函數||函數)?
- 30. 如何正確地複製此Lua函數的功能?
哇。我知道這一點,但期望它返回當前用戶,而不是該函數運行的用戶。謝謝! – 2009-06-24 12:39:08