首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在部分选择中不使用NLS_SORT

在部分选择中不使用NLS_SORT
EN

Stack Overflow用户
提问于 2015-04-27 16:01:57
回答 1查看 182关注 0票数 1

我已经将nls_sort参数设置为BINARY_AI,以执行不区分大小写的排序。我在系统和会话中设置了它:

代码语言:javascript
复制
alter session set nls_sort='BINARY_AI';
alter system set nls_sort='BINARY_AI' scope=spfile;

此查询的排序是正确的:

代码语言:javascript
复制
SELECT s."Id", s."Label" FROM "Software" s ORDER BY s."Label"

    Id   |  Label
_______________________
10218    | Able2Extract
10217    | AVS Video Recorder

如果使用此查询执行部分select:

代码语言:javascript
复制
SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY "Label" ASC) AS MYROW, subSelect.* 
    FROM (
        SELECT s."Id", s."Label" FROM "Software" s
    ) subSelect
) WHERE MYROW BETWEEN 1 AND 100

该排序不区分大小写:

代码语言:javascript
复制
    Id   |  Label
_______________________
10217    | AVS Video Recorder
10218    | Able2Extract

错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-27 16:52:44

您没有在第二个查询中指定的排序顺序,因为您没有ORDER BY子句,因此返回的结果以不确定的顺序返回。

您的MYROW值是根据NLS排序顺序分配的,但是您只使用它来筛选,而不是对结果集进行排序。您可以再次使用它:

代码语言:javascript
复制
SELECT "Id", "Label" FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY "Label" ASC) AS MYROW, subSelect.* 
    FROM (
        SELECT s."Id", s."Label" FROM "Software" s
    ) subSelect
) WHERE MYROW BETWEEN 1 AND 100
ORDER BY MYROW;

或按标签订购:

代码语言:javascript
复制
SELECT "Id", "Label" FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY "Label" ASC) AS MYROW, subSelect.* 
    FROM (
        SELECT s."Id", s."Label" FROM "Software" s
    ) subSelect
) WHERE MYROW BETWEEN 1 AND 100
ORDER BY "Label";

在使用ROW_NUMBER时,您也不需要两个级别的子查询,就像对ROWNUM一样;您可以将其简化为:

代码语言:javascript
复制
SELECT "Id", "Label" FROM (
    SELECT s."Id", s."Label",
      ROW_NUMBER() OVER (ORDER BY s."Label" ASC) AS MYROW
    FROM "Software" s
) WHERE MYROW BETWEEN 1 AND 100
ORDER BY "Label";

内部查询返回MYROW的expect值(比较SQL、代表“二进制”艾‘)。但这是使用11.2.0.2,它也适用于我在11.2.0.3。目前,我没有一个12c实例可以测试,但其他人可能能够验证那里的行为。

如果您在12.1.0.1中看到了MYROW的错误值,那么您可能会碰到bug 18353141或16934803,两者都位于正确的区域,并在12.1.0.2补丁集发行说明中提到。有关详细信息,请查看我的甲骨文支持

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29900637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档