您的位置:首页 > 数据库 > Oracle

oracle面向对象编程的多态性

2016-03-08 01:49 501 查看
--如果使用子类型初始化,则调用子类型函数

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> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: