加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle Deref函数:错误的数字或参数类型

发布时间:2021-01-16 08:22:57 所属栏目:站长百科 来源:网络整理
导读:我正在尝试在Oracle中创建一个对象方法,如下所示: CREATE OR REPLACE TYPE BODY TheType AS MEMBER FUNCTION getAtt RETURN VARCHAR2 IS BEGIN RETURN DEREF(SELF.Att).Att2; END;END;/ 但是我收到以下错误: PLS-00306: wrong number or types of argument

我正在尝试在Oracle中创建一个对象方法,如下所示:

CREATE OR REPLACE TYPE BODY TheType AS
    MEMBER FUNCTION getAtt RETURN VARCHAR2 IS
    BEGIN
        RETURN DEREF(SELF.Att).Att2;
    END;
END;
/

但是我收到以下错误:

PLS-00306: wrong number or types of arguments in call to 'DEREF'

类型TheType也是这样声明的:

CREATE OR REPLACE TYPE TheType UNDER SuperType ();
/

...

ALTER TYPE TheType ADD ATTRIBUTE ( Att REF TheType ) CASCADE;

...

ALTER TYPE TheType 
    ADD MEMBER FUNCTION getAtt RETURN VARCHAR2
CASCADE;

和Supertype的定义:

CREATE OR REPLACE TYPE SuperType AS OBJECT ( Att2 VARCHAR2(50) )
NOT FINAL NOT INSTANTIABLE;
/

我给DEREF函数一个具有正确类型的var,为什么会出现这个错误?

如果我信任Oracle doc,它应该工作

谢谢.

解决方法

将DEREF转换为SQL.例如

SQL> create or replace type supertype as object ( att2 varchar2(50) )
  2  not final not instantiable;
  3  /

Type created.

SQL> create or replace type thetype under supertype (
  2  att ref thetype,3  member function getatt return varchar2);
  4  /

Type created.

SQL> show errors type thetype
No errors.
SQL> create or replace type body thetype as
  2    member function getatt return varchar2 is
  3      v_t thetype;
  4    begin
  5             select deref(self.att) into v_t from dual;
  6             return v_t.att2;
  7    end;
  8  end;
  9  /

Type body created.

SQL> show errors type body thetype
No errors.
SQL> create table thetypes of thetype;

Table created.

SQL> insert into thetypes values ('hi there',null);

1 row created.

SQL> set serverout on
SQL> declare
  2    v_t thetype;
  3  begin
  4    select thetype(null,ref(a)) into v_t from thetypes a;
  5    dbms_output.put_line(v_t.getatt);
  6  end;
  7  /
hi there

PL/SQL procedure successfully completed.

SQL>

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!