使用'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提前。
答案 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。 现在您可以登录到您的数据库并进行测试。