将NLS_排序更改为二进制_CI时,Oracle 12c和18c上的查询失败

将NLS_排序更改为二进制_CI时,Oracle 12c和18c上的查询失败,oracle,Oracle,我有下面的查询,当我通过代码或Oracle SQL Developer执行它时,它会正确地返回记录 SELECT TABLE_T.COL_P, 1234 AS COL_C, TABLE_T.COL_D, SUM(SOME_COLUMN) Value FROM TABLE_T INNER JOIN TABLE_E E ON TABLE_T.COL_P = E.COL_P AND TABLE_T.COL_C = E.COL_C AND TABLE_T.COL

我有下面的查询,当我通过代码或Oracle SQL Developer执行它时,它会正确地返回记录

SELECT TABLE_T.COL_P,
       1234 AS COL_C,
       TABLE_T.COL_D,
       SUM(SOME_COLUMN) Value
FROM TABLE_T
INNER JOIN TABLE_E E ON TABLE_T.COL_P = E.COL_P
AND TABLE_T.COL_C = E.COL_C
AND TABLE_T.COL_CC = E.COL_CC
AND TABLE_T.COL_CL = E.COL_CL
INNER JOIN TABLE_C C1 ON C1.COL_P = E.COL_P
AND C1.COL_C = E.COL_C
INNER JOIN TABLE_C C2 ON C2.COL_P = C1.COL_P
AND C2.COL_CX = C1.COL_CX
AND C2.COL_CY = C1.COL_CY
AND C2.COL_CZ = C1.COL_CZ
WHERE TABLE_T.COL_P = 'Some Text'
  AND C2.COL_C = 1234
  AND TABLE_T.COL_CL IN
    (SELECT COL_CL
     FROM TABLE_CL
     WHERE COL_P = 'Some Text'
       AND ((COL_CLTYPE = 'VALUE_A')
            OR (COL_CLTYPE = 'VALUE_B')
            OR (COL_CLTYPE = 'VALUE_C')
            OR (COL_CLTYPE = 'VALUE_D')) )
GROUP BY TABLE_T.COL_P,
         TABLE_T.COL_D
但是,一旦我执行以下会话命令,它就无法返回记录:

ALTER SESSION SET NLS_COMP=语言

ALTER SESSION SET NLS\U SORT=二进制\U CI

只有在运行Oracle 12c或18c数据库时,才会出现此问题

在Oracle 12C R2或11g数据库上运行时,它可以在有/没有会话命令的情况下工作

我已经检查了12c/18c和12cR2的解释计划及其创建的相同计划

我发现通过在查询中添加ORDERBY子句(ORDERBY TABLE\u T.COL\D),它解决了这个问题

你知道是什么导致了这个问题吗


我知道按顺序解决方案是有效的,但我想知道根本原因是什么,是否有更好的解决方案。

实际条件值是什么?
“某些文本”
显然只是一个伪值。它基本上是一个名称/Id列,是该表唯一键的一部分