Oracle Deref函数:错误的数字或参数类型
发布时间:2021-01-16 11:22:26 所属栏目:站长百科 来源:网络整理
导读:我正在尝试在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>
(编辑:清远站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读

