新增类型报错

报错日志
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;
/


报错截图

1 个赞

这个自定义type有点复杂啊。。代码里面ODCIAGGREGATEINITIALIZE 函数存在?

1 个赞

初始化定义了

1 个赞

这块在官网上还真没找到资料。。要不先把这个自定义type简化一下注释掉一些复杂的东西,然后每次放开不同的注释来确定具体是哪个地方不支持

问题贴请发到 oceanbase 板块,不要发到官方精选板块哈~

CREATE TYPE 是 Oracle 租户的功能吧?用的是商业版而非社区版?具体版本号是啥呀?

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节。建议你通过以下方式寻求帮助:

1.如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;

2.如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

OceanBase官网商务咨询

https://www.oceanbase.com/contactus?fromPage=https%3A%2F%2Fwww.oceanbase.com%2Fsoftwarecenter-enterprise&dataSources=softwarecenter-enterprise_footercontact_d2022

初始化定义数组的地方不支持

是Oracle租户
版本:OceanBase 3.2.4.8