Сбой запроса в Oracle 12c и 18c при изменении NLS_SORT на BINARY_CI - PullRequest
0 голосов
/ 02 октября 2019

У меня есть следующий запрос, который корректно возвращает записи, когда я выполняю его через код или 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 = LINGUISTIC;

ALTER SESSION SET NLS_SORT = BINARY_CI;

Эта проблема возникает только при работе с базой данных Oracle 12c или 18c.

Он работает с командами сеанса / без команд при работе с базой данных Oracle 12C R2 или 11g.

Я уже проверил план объяснения для 12c / 18c и 12cR2 и создаю тот же план.

Я обнаружил, что добавление в запрос предложения ORDER BY (ORDER BY TABLE_T.COL_D решает проблему.

Есть идеи о том, что может вызывать эту проблему?

Я знаю, что решение ORDER BY работает, но я хотел бы знать, что является основной причиной и есть ли лучшее решение для нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...