Oracle SQL ORA-00600: ошибка с GREATEST и подзапросом regexp_replace - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть небольшой фрагмент кода, у которого есть подзапрос, использующий функцию regexp_replace для получения метки времени, и он находится внутри функции GREATEST, чтобы получить самую высокую дату из этого поля, и поле во внешнем запросе.

Данные, которые я использую в подзапросе, выглядят так:

IDDate      IDKeys
17-DEC-16   Q=INT^A_NO=123^
03-OCT-18   B_ID=123^
18-OCT-18   C_ID=123^
28-OCT-18   C_ID=123^

Если я запускаю этот сегмент кода:

SELECT MAX(IDDate) GDATE
FROM HHL h
WHERE regexp_replace(IDKeys, '[^0-9]', '') = '123'
AND LEFT(IDKeys, 1) = 'C'

Возвращает правильную информацию

GDATE
28-OCT-18

Однако, когда я включаю это во внешний запрос как подзапрос, подобный этому:

SELECT DISTINCT
c.P_ID,
GREATEST((SELECT MAX(IDDate) GDATE
          FROM HHL h
          WHERE regexp_replace(IDKeys, '[^0-9]', '') = c.P_ID
          AND LEFT(IDKeys, 1) = 'C'), c.CIDDate) GCDate
FROM CICC c

Я получаю следующую ошибку:

ORA-00600: internal error code, arguments: [kkqcsfixfro:1 -- frooutj], [], [], [], [], [], [], [], [], [], [], []
00600. 00000 -  "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]"
*Cause: This is the generic internal error number for Oracle program
        exceptions. It indicates that a process has encountered a low-level,
        unexpected condition. The first argument is the internal message
        number. This argument and the database version number are critical in
        identifying the root cause and the potential impact to your system.

EDIT

Это работает, если я использую функции SUBSTR и INSTR вместо regexp_replace:

SELECT DISTINCT
c.P_ID,
GREATEST((SELECT MAX(IDDate) GDATE
          FROM HHL h
          WHERE SUBSTR(NVL(SUBSTR(IDKeys, 0, INSTR(IDKeys, '^')-1), IDKeys), INSTR(NVL(SUBSTR(IDKeys, 0, INSTR(IDKeys, '^')-1), IDKeys), '=') + 1) = c.P_ID
          AND LEFT(IDKeys, 1) = 'C'), c.CIDDate) GCDate
FROM CICC c

1 Ответ

0 голосов
/ 09 ноября 2018

Я предлагаю вам создать запрос на обслуживание службы поддержки Oracle. Похоже, вы сталкиваетесь с ошибкой 19894622 - ORA-600 [kkqcsfixfro: 1 - frooutj] в 12c (Doc ID 19894622.8) . Уязвимые версии программного обеспечения: Версии> = 12.1.0.1, но НИЖЕ 12.2. Вы должны по крайней мере проверить с вашим dba, какая у вас версия программного обеспечения и исправления решат проблему.

В примечании описана прогулка.

alter session set "_optimizer_unnest_scalar_sq"=false;

Как видите, это относится к скрытому параметру, который устанавливается на уровне сеанса. Если вы хотите установить этот параметр на уровне экземпляра, рекомендуется использовать такие параметры в службе поддержки Oracle, чтобы они рекомендовали установить этот параметр.

...