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