2013-10-18 81 views
4

使用'alter session set nls_sort'似乎不適合我。我用sqlplus v11.2.0.3.0 x64和嘗試應用簡單的步驟在http://docs.oracle.com/cd/E18283_01/appdev.112/e10766/tdddg_globalization.htm#CACJEJIBOracle NLS_SORT不能通過ALTER SESSION工作?

CREATE TABLE temp (name VARCHAR2(15)); 

INSERT INTO temp (name) VALUES ('laguna'); 
INSERT INTO temp (name) VALUES ('llama'); 
INSERT INTO temp (name) VALUES ('loco'); 

SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_SORT'; 
Result: BINARY 

SELECT * FROM temp ORDER BY name; 
Result: 
NAME 
--------------- 
laguna 
llama 
loco 

ALTER SESSION SET NLS_SORT=SPANISH_M; 
SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_SORT'; 
Result: SPANISH_M 

SELECT * FROM temp ORDER BY name; 
Results are the same: 
NAME 
--------------- 
laguna 
llama 
loco 

「例9-10 NLS_SORT影響語言排序」在Oracle文檔中找到根據該DOCO,排序上面的順序應該改變了,但沒有改變。但是,如果我申請的NLS_SORT作爲查詢本身的一部分,我得到了正確的resutls:

SELECT * FROM temp ORDER BY NLSSORT(name, 'NLS_SORT=SPANISH_M'); 
Result: 
NAME 
--------------- 
laguna 
loco 
llama 

缺少什麼我在這裏? Thx提前。

+1

這是一個奇怪的問題。我無法在我的機器上或[SQL小提琴](http://sqlfiddle.com/#!4/35901/7)上覆制它。也許你正在碰到一些奇怪的錯誤。你對不同的客戶有同樣的問題嗎?您可能想要發佈您的客戶端和數據庫版本,以及來自v $ parameter的'select name,value'的結果,其中名稱如'%nls%';'。 –

+0

我無法複製它。我在SQLPlus和SQLDeveloper中試過了。它應該真的有用。我的版本是「Oracle數據庫11g企業版版本11.2.0.2.0」。 – hol

+0

我也使用了11.2.0.2.0。奇怪的是,它適用於使用11.2.0.3.0的同事,但不適用於其他人。我將嘗試卸載/重新安裝。 – Paul

回答

1

當我卸載了Oracle v11.2.0.3.0並安裝了v12.1.0.1.0時,已經解決了這個問題。說實話,我不能排除它可能只是我們的v11.2.0.3.0 Oracle安裝程序或Oracle本身的包裝/配置問題。 Thx的所有帖子都一樣。

0

解決的辦法是:

1) Go to the REGISTRY (run regedit) 
2) Find HKEY_LOCAL_MACHINE/Software/ORACLE 
3) Change NLS_LANG 

我改成了

AMERICAN_AMERICA.AR8MSWIN1256 

不要忘記,你必須在第2部分 所有更改NLS_LANG現在您可以登錄到數據庫,並對其進行測試。

+1

儘管這可能會提供正確的結果,但它不能解決單個會話級別的問題。我們的應用程序根據用戶當前的語言環境更改了oracle連接/會話的NLS_SORT。 – Paul