在 oracle 12.2.0.1.0 中使用来自 table 的 Select 时出现 ORA-00600
ORA-00600 when using Select from table in oracle 12.2.0.1.0
我们正在将我们的数据库从 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)).
感谢您的帮助。
这是与 Oracle 12.2
相关的错误,已经有 linux OS 的补丁,已在 Oracle 18
中修复
我们正在将我们的数据库从 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 中无效吗?
另请注意,我们通过将代码更改为:
SELECT listagg(COLUMN_VALUE, ', ') within group(order by COLUMN_VALUE) INTO sResult FROM TABLE(TestUtf8Tools.Split(sResult)).
感谢您的帮助。
这是与 Oracle 12.2
相关的错误,已经有 linux OS 的补丁,已在 Oracle 18