2014-01-08 83 views
1

我在我的系統上使用Oracle 11g,並且需要使用SQL獲取系統的環境變量。如何在oracle中使用sql語句讀取環境變量

有沒有什麼辦法得到它? (例如USER,HOME,PATH,實際上,我需要獲取我的自定義環境變量以進行系統管理。)

或者我在PL/SQL中閱讀了關於dbms_system.get_env()的內容。我怎樣才能使用這從我的SQL? (對不起,我更接近系統管理員。)

編輯: 我想要做的是一樣的東西如下:

============================= 
    java: query to get XXX_INFO 
    --------------------------- 
server: 
============================= 
       | 
============================= 
    dbms: select SOMETHING... 
    --------------------------- 
server: export XXX_INFO=myXXX 
============================= 
+1

要通過普通的SQL使用'dbms_system',你可以創建一個返回你問值的包裝功能。儘管如此,您正在尋找當前會話的環境,而不是啓動實例的會話環境。 –

+0

@AlexPoole,作爲系統管理員和麪向系統的開發人員,我想獲取有關數據庫實例環境的信息。我的目標是通過set(在服務器上)自動繪製系統映射,並從(通過java的was/dbms)獲取一些環境信息。 – sio4

回答

2

可以使用SYS_CONTEXT函數來獲得你需要的信息。 EG - 得到系統的IP地址,使用它作爲

select sys_context('USERENV', 'IP_ADDRESS') from dual 

輸出

| SYS_CONTEXT('USERENV','IP_ADDRESS') | 
|-------------------------------------| 
|       10.0.0.113 | 

關注這個link瞭解更多信息

https://docs.oracle.com/database/121/SQLRF/functions199.htm#SQLRF06117

+0

感謝Alex,修改帖子。 – San

+0

我想獲得更多關於服務器環境的信息。事實上,我需要爲我的目的設置自己的環境變量,並通過DBMS獲取它。我已經在USERENV命名空間中檢查變量,但它只有SERVER_HOST。 – sio4

+0

鏈接已損壞。 – DanGordon

1

安裝使用dbms_system作爲SYSDBA,從SQL *加。然後創建一個函數並將其執行授予您的用戶。通常在SYS中創建對象是個不錯的主意,但由於DBMS_SYSTEM沒有記錄,所以您可能希望避免將整個軟件包授予任何人。

SQL> @?/rdbms/admin/dbmsutil.sql 

Session altered. 

Package created. 

Synonym created. 

Grant succeeded. 

Session altered. 

SQL> create or replace function sys.get_env(p_var in varchar2) return varchar2 is 
    2  v_return_value varchar2(4000); 
    3 begin 
    4  dbms_system.get_env(p_var, v_return_value); 
    5  return v_return_value; 
    6 end; 
    7/

Function created. 

SQL> grant execute on sys.get_env to <your user>; 

Grant succeeded. 

SQL> 

現在從你的用戶:

SQL> select sys.get_env('ORACLE_HOME') from dual; 

SYS.GET_ENV('ORACLE_HOME') 
-------------------------------------------------- 
C:\app\oracle\product\12.1.0\dbhome_1 
相關問題