Oracle SQL ORA-00600:GREATEST和regexp_replace子查询出错

时间:2018-11-09 11:02:12

标签: sql regex oracle oracle-sqldeveloper

我有一小段代码,其中有一个使用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.
  

编辑

如果我使用SUBSTRINSTR函数而不是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 :(得分:2)

我建议您创建对Oracle支持的服务请求。好像您面对的是错误19894622-ORA-600 [kkqcsfixfro:1-frooutj]错误在12c中发生错误(文档ID 19894622.8)。受影响的软件版本是>> 12.1.0.1但低于12.2的版本。您至少应通过dba验证您拥有的软件版本以及修补程序是否可以解决问题。

注释中描述了四处走动的情况。

alter session set "_optimizer_unnest_scalar_sq"=false;

如您所见,它引用了在会话级别设置的hidden参数。如果要在实例级别设置此参数,则使用此类参数的最佳实践是与Oracle支持部门确认,他们建议设置此参数。