4

使用“alter session set nls_sort”似乎对我不起作用。我正在使用 SQLPlus v11.2.0.3.0 x64 并尝试应用位于http://docs.oracle.com/cd/E18283_01/appdev的 Oracle 文档中的“示例 9-10 NLS_SORT 影响语言排序顺序”的简单步骤.112/e10766/tdddg_globalization.htm#CACJEJIB

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

根据文档,上面的排序顺序应该已经改变,但它没有。但是,如果我将 NLS_SORT 作为查询本身的一部分应用,我会得到正确的结果:

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

我在这里想念什么?提前谢谢。

4

2 回答 2

1

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

于 2013-12-03T20:48:36.140 回答
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。现在您可以登录到您的数据库并对其进行测试。

于 2013-10-20T10:01:43.577 回答