我们正在使用NHibernate和Oracle进行数据库访问。 在选择期间,我们按文本排序数据,但文化特定字符位于列表的末尾。
We want: AĀBCDEĒFG
We got: ABCDEFGĀĒ
在oracle文档中,我们发现必须将NLS_SORT
设置为BINARY_AI
才能启用此类排序。
如果可以(以及如何)在NHibernate配置中或在连接初始化期间设置此参数,请指教吗?
谢谢
答案 0 :(得分:0)
您可以使用
为每个会话设置此项ALTER SESSION SET NLS_SORT = BINARY_AI;
或将其设置为数据库参数
您可以将其放入可以调用的包中
PROCEDURE SET_NLS_SORT(NLS_SORT_TYPE_IN IN VARCHAR2 IS
v_sort_type VARCHAR2(100);
BEGIN
IF NLS_SORT_TYPE_IN IS NOT NULL
THEN
v_sort_type := NLS_SORT_TYPE_IN;
ELSE
v_sort_type := BINARY_AI;
END IF;
execute immediate 'ALTER SESSION SET NLS_SORT='||v_sort_type ;
END;
请注意,可能需要使用此affect the execution plan of queries并创建自定义索引。
答案 1 :(得分:0)
如果您不想/不能设置nls_sort参数,还有NLSSORT function。
类似的东西:
with sample_data as (select 'A' col1 from dual union all
select 'Ā' col1 from dual union all
select 'B' col1 from dual union all
select 'C' col1 from dual union all
select 'D' col1 from dual union all
select 'E' col1 from dual union all
select 'Ē' col1 from dual union all
select 'F' col1 from dual union all
select 'G' col1 from dual)
select *
from sample_data
order by nlssort(col1, 'NLS_SORT=binary_ai');
COL1
----
A
Ā
B
C
D
E
Ē
F
G