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