报错日志
ErrorCode = 600, SQLState = 0A000, Details = ORA-00600: internal error code, arguments: -4007, Not supported feature or function
报错脚本
CREATE OR REPLACE TYPE concat_clob_im
AUTHID CURRENT_USER AS OBJECT
(
str_array concat_str_array,
--初始化
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT concat_clob_im) RETURN NUMBER,
--迭代方法
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT concat_clob_im, P1 IN concat_str) RETURN NUMBER,
--返回结果
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN concat_clob_im, RETURNVALUE OUT CLOB, FLAGS IN NUMBER) RETURN NUMBER,
--合并不同指针对应的结果(并行查询)
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT concat_clob_im, SCTX2 IN concat_clob_im) RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY concat_clob_im
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT concat_clob_im)
RETURN NUMBER
IS
BEGIN
SCTX := concat_clob_im(concat_str_array()) ;/*初始化对象数组*/
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT concat_clob_im,
P1 IN concat_str)
RETURN NUMBER
IS
BEGIN
str_array.extend;
str_array(str_array.count) := P1;/*对象数组存储聚合对象*/
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN concat_clob_im,
RETURNVALUE OUT CLOB,/*返回结果,当前是字符串,有长度限制,也可以使用clob*/
FLAGS IN NUMBER)
RETURN NUMBER
IS
len number;
rownum number;
BEGIN
/*循环聚合数组,取出聚合字段根据分隔符聚合*/
select count(*) into len from table(str_array);
rownum := 0;
for x in (select rownum,value,separator from table(str_array) order by orderby) loop
rownum := rownum + 1;
if len = rownum then
RETURNVALUE := RETURNVALUE || x.value;
else
RETURNVALUE := RETURNVALUE || x.value || x.separator;
end if;
end loop;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT concat_clob_im,
SCTX2 IN concat_clob_im)
RETURN NUMBER
IS
BEGIN
/*两个聚合数组的拼接*/
FOR i in 1..SCTX2.str_array.COUNT loop
str_array.extend;
str_array(str_array.count) := SCTX2.str_array(i);
END LOOP;
RETURN ODCICONST.SUCCESS;
END;
END;
/
报错截图