oracle面向对象编程的多态性

来源:互联网 发布:闪电邮mac版 编辑:程序博客网 时间:2024/05/22 12:20
--如果使用子类型初始化,则调用子类型函数
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