NLS引數優先順序解析
本文解析了NLS引數在C/S模式下的作用順序。
可以在資料庫、例項和會話級別上設定NLS引數。
如果在多個級別上均設定了NLS引數:
1.NLS資料庫引數優先順序低於NLS例項引數
2.NLS資料庫和例項引數優先順序低於NLS會話引數
比如,在init.ora中設定了引數NLS_NUMERIC_CHARACTERS(point B),並且在客戶端環境變數(point A)中也有設定,那麼會話級的引數值會覆蓋例項級的引數值。
譯自Metalink Note 241047.1 The Priority of NLS Parameters Explained
A)會話級引數設定
透過以下查詢
select * from NLS_SESSION_PARAMETERS;
獲取會話級上的NLS引數設定.
1)透過“alter session ”命令修改NLS引數。比如:
alter session set NLS_DATE_FORMAT = 'DD/MM/YYYY';
注意:透過after logon trigger也可以實現。
select OWNER, TRIGGER_NAME, TRIGGER_BODY
from DBA_TRIGGERS
where trim(TRIGGERING_EVENT) = 'LOGON';
參考Note 251044.1
2)如果沒有顯式透過“alter session”設定,那麼會透過客戶端的NLS_LANG設定相應的NLS引數。
NLS_LANG包括:NLS_LANG=_.
比如:
NLS_LANG=DUTCH_BELGIUM.WE8MSWIN1252
如何查詢會話使用的NLS_LANG,參考Note 158577.1
3)如果NLS_LANG只是指定了,那麼預設的為AMERICAN
注意NLS_LANG=_BELGIUM.WE8PC850而非NLS_LANG=BELGIUM.WE8PC850,”_”是必需的。
比如如果設定了NLS_LANG=_BELGIUM.WE8PC850
那麼引數設定為:
PARAMETER VALUE
------------------------------ --------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY BELGIUM
NLS_CURRENCY
NLS_ISO_CURRENCY BELGIUM
....
4)如果NLS_LANG只是指定了,那麼會依據而變化。比如如果設定了NLS_LANG= ITALIAN_.WE8PC850
那麼引數設定為:
PARAMETER VALUE
------------------------------ --------------
NLS_LANGUAGE ITALIAN
NLS_TERRITORY ITALY
NLS_CURRENCY
NLS_ISO_CURRENCY ITALY
.....
5)如果沒有設定_,那麼預設的是AMERICAN_AMERICA。
.NLS_COMP不能作為環境變數設定,必需透過alter session配置
比如,設定NLS_LANG=.WE8PC850
那麼引數設定為:
PARAMETER VALUE
------------------------------ ----------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
....
6)設定了NLS_LANG仍然可以單獨設定其他NLS引數,比如NLS_ISO_CURRENCY=FRANCE
NLS_LANG=AMERICAN_AMERICA.WE8PC850
那麼引數設定為:
PARAMETER VALUE
------------------------------ -----------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY FRANCE
...
注意NLS_ISO_CURRENCY= FRANCE中的空格,雖然不會報錯,但會忽略該引數。
預設值:
.如果NLS_DATE_LANGUAGE或者NLS_SORT沒有設定,從NLS_LANGUAGE繼承
.如果f NLS_CURRENCY, NLS_DUAL_CURRENCY, NLS_ISO_CURRENCY, NLS_DATE_FORMAT,NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT, NLS_NUMERIC_CHARACTERS沒有設定,從NLS_TERRITORY中繼承。
7)如果NLS_LANG沒有設定,預設為_.US7ASCII,_的值為NLS_INSTANCE_PARAMETERS中的設定。在客戶端單獨設定的比如NLS_SORT等引數會被忽略。
.引數NLS_SESSION_PARAMETERS優先於NLS_INSTANCE_PARAMETERS和NLS_DATABASE_PARAMETERS
.不能從伺服器端disabled該行為,所以客戶端的引數設定通常會優於伺服器端設定。
.NLS_LANG引數不能用alter session設定,而NLS_LANGUAGE和NLS_TERRITORY可以,但這兩個引數不能作為單獨的客戶端NLS引數設定
.客戶端NLS_LANG設定的字符集部分不會在任何系統表或檢視中體現。
參考Note 158577.1中的4.2部分
.9i中NLS_LENGTH_SEMANTICS引數不能作為環境變數設定,10g可以
.NLS_NCHAR_CONV_EXCP不能作為環境變數設定,但可以使用alter session設定
.會話引數中的NLS_LANGUAGE同樣作為錯誤資訊的顯示語言。參考Note 132090.1
.不能透過sql指令碼設定NLS引數,必需透過alter session
B)例項級引數設定
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-21779/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HttpClient和HttpGet 引數的優先順序HTTPclient
- js中同名變數或者引數的優先順序JS變數
- Oracle RAC引數設定優先順序別問題分析Oracle
- CSS優先順序CSS
- ansible 變數優先順序示例變數
- nls引數、環境變數以及函式等起作用的順序!變數函式
- 中斷優先順序
- python運算子及優先順序順序Python
- 同名函式的 帶 params 引數 與 不帶 params 引數的執行優先順序函式
- Android程式優先順序Android
- SQL 優先順序join>whereSQL
- java運算子優先順序Java
- nginx快取優先順序Nginx快取
- php運算子優先順序PHP
- css優先順序彙總CSS
- mysql 多個引數選項檔案my.cnf優先順序研究MySql
- 程式初始(二)——程式優先順序,環境變數變數
- java setPriority()設定優先順序Java
- [譯]HTTP/2的優先順序HTTP
- 封裝優先順序佇列封裝佇列
- Yarn任務優先順序配置Yarn
- gitignore優先順序小結Git
- css 選擇器優先順序CSS
- CSS的處理優先順序CSS
- java執行緒優先順序Java執行緒
- 資料型別優先順序資料型別
- 深入理解css優先順序CSS
- 華為路由協議優先順序路由協議
- C++運算子優先順序C++
- Mysql關於my.cnf引數檔案的讀取順序及各項配置的覆蓋優先順序MySql
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 何為CSS 樣式優先順序CSS
- html優先順序和層疊性HTML
- C 語言運算子優先順序
- 任務卡片優先順序排序-Leangoo排序Go
- 優先順序反轉+解決方案
- 優先順序反轉解決方案
- css選擇器的優先順序CSS