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

本文关键字:NLS SORT 设置 配置 可以使 Nhibernate 是否 | 更新日期: 2023-09-27 18:20:37

我们使用NHibernate和Oracle进行数据库访问。在选择过程中,我们按文本对数据进行排序,但特定于区域性的字符会出现在列表的末尾。

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

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

您能建议是否可以(以及如何)在NHibernate配置或连接初始化期间设置此参数吗?

感谢

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

如果您不想/不能设置nls_sort参数,还有NLSSORT函数。

类似于:

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  

您可以使用设置每个会话

ALTER会话集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;

请记住,使用它会影响查询的执行计划,并且可能需要创建自定义索引。