oracle面向对象编程的多态性

--如果使用子类型初始化,则调用子类型函数
SQL> create or replace type pt is object
  2  (
  3    name varchar2(20),
  4    sex  varchar2(2),
  5    age  number,
  6    member procedure p_Set_Print,
  7    member function f_get_info Return varchar2
  8  )  not final
  9  /
Type created
SQL> create or replace type body pt is
  2    member procedure p_Set_Print
  3    is
  4    begin
  5      dbms_output.put_line('pt_P_Set_Print');
  6    end;
  7    member function f_get_info Return varchar2
  8    is
  9    begin
 10      return 'pt  姓名:'||self.name||'  性别:'||self.sex||'  年龄:'||self.age;
 11    end;
 12  end;
 13  /
Type body created
SQL> create or replace type st under pt
  2  (
  3    overriding member procedure p_Set_Print,
  4    overriding member function f_get_info Return varchar2
  5  )
  6  /
Type created
SQL> create or replace type body st is
  2    overriding member procedure p_Set_Print
  3    is
  4    begin
  5      dbms_output.put_line('st_P_Set_Print');
  6    end;
  7    overriding member function f_get_info Return varchar2
  8    is
  9    begin
 10      return 'st  姓名:'||self.name||'  性别:'||self.sex||'  年龄:'||self.age;
 11    end;
 12  end;
 13  /
Type body created


SQL> set serverout on
SQL> 
SQL> declare
  2    v pt:=pt('张三','女','20');
  3  begin
  4    v.p_Set_Print;
  5    dbms_output.put_line(v.f_Get_info);
  6  end;
  7  /
pt_P_Set_Print
pt  姓名:张三  性别:女  年龄:20
PL/SQL procedure successfully completed


SQL> 
SQL> declare
  2    v st:=st('张三','女','20');
  3  begin
  4    v.p_Set_Print;
  5    dbms_output.put_line(v.f_Get_info);
  6  end;
  7  /
st_P_Set_Print
st  姓名:张三  性别:女  年龄:20
PL/SQL procedure successfully completed


SQL> 
SQL> declare
  2    v pt:=st('张三','女','20');
  3  begin
  4    v.p_Set_Print;
  5    dbms_output.put_line(v.f_Get_info);
  6  end;
  7  /
st_P_Set_Print
st  姓名:张三  性别:女  年龄:20
PL/SQL procedure successfully completed


SQL> 
SQL> declare
  2    v st:=pt('张三','女','20');
  3  begin
  4    v.p_Set_Print;
  5    dbms_output.put_line(v.f_Get_info);
  6  end;
  7  /
declare
  v st:=pt('张三','女','20');
begin
  v.p_Set_Print;
  dbms_output.put_line(v.f_Get_info);
end;
ORA-06550: 第 2 行, 第 9 列: 
PLS-00382: 表达式类型错误
ORA-06550: 第 2 行, 第 5 列: 
PL/SQL: Item ignored
ORA-06550: 第 4 行, 第 3 列: 
PLS-00320: 此表达式的类型声明不完整或格式不正确
ORA-06550: 第 4 行, 第 3 列: 
PL/SQL: Statement ignored
ORA-06550: 第 5 行, 第 24 列: 
PLS-00320: 此表达式的类型声明不完整或格式不正确
ORA-06550: 第 5 行, 第 3 列: 
PL/SQL: Statement ignored


SQL> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值