Oracle NLS_SORT无法通过ALTER SESSION工作?

时间:2013-10-18 21:45:28

标签: sql oracle sorting sqlplus globalization

使用'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#CACJEJIB

中Oracle文档中的“示例9-10 NLS_SORT影响语言排序顺序”的简单步骤
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

根据doco,上面的排序顺序应该已经改变,但事实并非如此。但是,如果我将NLS_SORT作为查询本身的一部分应用,我会得到正确的结果:

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

我在这里缺少什么? Thx提前。

2 个答案:

答案 0 :(得分:1)

卸载Oracle v11.2.0.3.0并安装v12.1.0.1.0后,解决了这个问题。说实话,我不能排除它可能只是我们的v11.2.0.3.0 Oracle安装程序或Oracle本身的包装/配置问题。所有帖子的Thx都是一样的。

答案 1 :(得分: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。 现在您可以登录到您的数据库并进行测试。