【问题标题】:ORA-00600 when using Select from table in oracle 12.2.0.1.0在 oracle 12.2.0.1.0 中使用从表中选择时出现 ORA-00600
【发布时间】:2019-01-18 10:40:54
【问题描述】:

我们正在将我们的数据库从 WE8MSWIN1252 迁移到 AL32UTF8 以支持多种语言。 尝试编译 TestUtf8 包时出现 ORA-00600 错误:

CREATE TaBle Test_Utf8(
                       TestUtf8Key NUMBER(5) PRIMARY KEY,
                       Description VARCHAR2(2000),
                       Code VARCHAR2(10)
                     );


CREATE OR REPLACE TYPE UTF8Type_TableOfVarchar IS TABLE OF VARCHAR2(32767);


CREATE OR REPLACE PACKAGE TestUtf8Tools AS

  FUNCTION Split( psList       VARCHAR2,
                  psSeparator  VARCHAR2 := ',' )  RETURN UTF8Type_TableOfVarchar PIPELINED;

END TestUtf8Tools;


CREATE OR REPLACE PACKAGE BODY TestUtf8Tools AS

  FUNCTION Split ( psList       VARCHAR2,
                   psSeparator  VARCHAR2 := ',' ) RETURN UTF8Type_TableOfVarchar PIPELINED IS
    intidx      INTEGER;
    sList VARCHAR2(4000) := psList;
  BEGIN
    IF psList IS NOT NULL THEN
      LOOP
        intidx := INSTR(sList,psSeparator);
        IF intidx > 0 then
          PIPE ROW(SUBSTR(sList,1,intidx-1));
          sList := SUBSTR(sList,intidx+LENGTH(psSeparator));
        ELSE
          PIPE ROW(sList);
          EXIT;
        END IF;
      END LOOP;
    ELSE
      PIPE ROW(psList);
    END IF;
    RETURN;
  END Split;

END TestUtf8Tools;

    CREATE OR REPLACE PACKAGE TestUtf8 AS

FUNCTION TestFROMTable RETURN VARCHAR2;

END TestUtf8;

CREATE OR REPLACE PACKAGE BODY TestUtf8 AS

FUNCTION TestFROMTable RETURN VARCHAR2   IS
 sResult VARCHAR2(4000);
 sCode VARCHAR2(10);
 sDescription VARCHAR(4000);

  CURSOR cCursor IS
    SELECT Code, Description
      FROM Test_Utf8
     WHERE TestUtf8Key = 1;

 BEGIN

  OPEN  cCursor;
  FETCH cCursor INTO Scode, sDescription;
  CLOSE cCursor;

  sResult := Scode;
  IF 1 = 1 THEN 
    sResult := sResult || ', ' || sDescription;
  END IF;

SELECT listagg(COLUMN_VALUE, ', ') within group(order by COLUMN_VALUE) INTO sResult FROM (SELECT DISTINCT COLUMN_VALUE FROM TABLE(TestUtf8Tools.Split(sResult)));

  RETURN(sResult);
END;
END TestUtf8;

我们得到以下错误:

PL/SQL: SQL Statement ignored
PL/SQL: ORA-00600: internal error code, arguments: [qctbyt :
     bfc], [65532], [18446744073709551612], [1], [873], [1], [1], [0],
     [], [], [], []

显然错误是由

引起的
SELECT listagg(COLUMN_VALUE, ', ') within group(order by COLUMN_VALUE) INTO sResult FROM (SELECT DISTINCT COLUMN_VALUE FROM TABLE(TestUtf8Tools.Split(sResult)));

这在 oracle 12.1.0.2.0 中运行良好,但在 12.2.0.1.0 中却不行。 您知道为什么这在之前有效但在 12.2 中无效吗? 另请注意,我们通过将代码更改为以下代码来找到 12.2 的修复:

SELECT listagg(COLUMN_VALUE, ', ') within group(order by COLUMN_VALUE) INTO sResult FROM  TABLE(TestUtf8Tools.Split(sResult)).

感谢您的帮助。

【问题讨论】:

  • ORA-00600 是一个内部错误,通常与错误有关。您需要向 Oracle 提出服务请求以获得解释和/或修复。
  • 您是如何从 WE8MSWIN1252 迁移到 AL32UTF8 的?
  • 我们创建了一个新数据库,然后我们进行了 oracle 数据泵导出/导入

标签: oracle utf-8 oracle12c ora-00600


【解决方案1】:

这是一个与Oracle 12.2相关的bug,已经有针对linux OS的补丁,这个已经在Oracle 18修复了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多