是否可以使用Nhibernate配置设置NLS_SORT?

时间:2015-11-05 14:57:09

标签: c# oracle linq nhibernate cultureinfo

我们正在使用NHibernate和Oracle进行数据库访问。 在选择期间,我们按文本排序数据,但文化特定字符位于列表的末尾。

We want: AĀBCDEĒFG
We got: ABCDEFGĀĒ

在oracle文档中,我们发现必须将NLS_SORT设置为BINARY_AI才能启用此类排序。

如果可以(以及如何)在NHibernate配置中或在连接初始化期间设置此参数,请指教吗?

谢谢

2 个答案:

答案 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