淺談oracle中的context(上下文)

轉載自:http://blog.itpub.net/25701553/viewspace-702957
context這個詞見得還是挺多的,尤其是在計算機領域。大部人將它翻譯爲上下文,我也就跟隨大衆吧。比如操作系統中的上下文切換等等。那麼上下文到底意味着什麼呢?在我看來就是當前程序運行的一個環境信息。舉個例子說吧,當一個用戶登錄oracle之後就會有一個session,這個session中包含了session_id,用戶名等等信息,這就是上下文的一些信息。那麼,在oracle中怎麼查看這個上下文的一些信息呢?
(1)查看context中的屬性信息。
oracle默認的爲我們創建了一個context叫userenv(user environment),在這裏你可以查看到很多session級別的信息。裏面的單詞都很簡單,相信大家都知道每個屬性表示什麼意思。
SYS_CONTEXT('USERENV','TERMINAL') 
SYS_CONTEXT('USERENV','LANGUAGE')
SYS_CONTEXT('USERENV','SESSIONID') 
SYS_CONTEXT('USERENV','INSTANCE')
SYS_CONTEXT('USERENV','ENTRYID') 
SYS_CONTEXT('USERENV','ISDBA') 
SYS_CONTEXT('USERENV','NLS_TERRITORY') 
SYS_CONTEXT('USERENV','NLS_CURRENCY')
SYS_CONTEXT('USERENV','NLS_CALENDAR') 
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') 
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') 
SYS_CONTEXT('USERENV','NLS_SORT') 
SYS_CONTEXT('USERENV','CURRENT_USER')
SYS_CONTEXT('USERENV','CURRENT_USERID') 
SYS_CONTEXT('USERENV','SESSION_USER') 
SYS_CONTEXT('USERENV','SESSION_USERID') 
SYS_CONTEXT('USERENV','PROXY_USER') 
SYS_CONTEXT('USERENV','PROXY_USERID') 
SYS_CONTEXT('USERENV','DB_DOMAIN') 
SYS_CONTEXT('USERENV','DB_NAME') 
SYS_CONTEXT('USERENV','HOST') 
SYS_CONTEXT('USERENV','OS_USER') 
SYS_CONTEXT('USERENV','EXTERNAL_NAME') 
SYS_CONTEXT('USERENV','IP_ADDRESS') 
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') 
SYS_CONTEXT('USERENV','BG_JOB_ID') 
SYS_CONTEXT('USERENV','FG_JOB_ID') 
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE')
SYS_CONTEXT('USERENV','AUTHENTICATION_DATA')  
(2)我們自己創建一個context
語法:
DBMS_SESSION.SET_CONTEXT ( namespace VARCHAR2, attribute VARCHAR2, value VARCHAR2, username VARCHAR2, client_id VARCHAR2 );
三個參數是必須的,後兩個非必須,如果不寫的話就默認爲null。後面兩個參數是針對全局的context
使用的,這裏不討論了,請查閱相關資料。一個namespace下的attribute數理論上是沒有限制的。
1)創建一個context
CREATE OR REPLACE CONTEXT context_name USING proc_name
2)建立與上下文先關的過程(也就是上面的proc_name)
CREATE OR REPLACE PROCEDURE proc_name
/**
context_name:上面的那個上下文名字
attribute_name:屬性的名字,就相當用戶userenv中的host,db_name一樣
attribute_value:屬性的值
**/
AS
  BEGIN
DBMS_SESSION.set_context('context_name', 'attribute_name',attribute_value);
END;
當我們創建好了之後,就可以可以使用了。
(3)context的作用
context的最主要的作用是對信息的一種管理上的方便,這有點類似於OO中的封裝思想。我們得到這些信息只要通過SYS_CONTEXT('namespace','attribute')來獲得,方便、簡潔。
當然,關於context還有很多更深層次的知識,但是如果我們不是那些oracle的底層開發人員,沒有必要去過多的深入研究,要把力氣用在刀刃上!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章