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>
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>
相关文章推荐
- Oracle表的管理
- oracle 释放无用连接
- 关于学习oracle的PLSQL的完整笔记
- mysql和oracle区别
- Oracle 11G搭建单实例Active DataGuard
- oracle数据库扩容
- oracle表名,字段名的长度限制
- oracle判断是否为数字或数字型字符串
- Oracle 11g RAC客户端使用SCAN IP无法连接问题
- Oracle 11g RAC客户端使用SCAN IP无法连接问题
- ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist的原因分析
- 解决X64操作系统PL/SQL连接报错问题 make sure you have the 32 bits oracle client installed
- ORACLE基础知识
- Oracle SPM(SQL Plan Management)介绍及演示SQL
- oracle定义job执行存储过程方式
- Linux command line install Oracle Java
- Oracle存储过程执行update语句不报错不生效问题
- Oracle存储过程执行update语句不报错不生效问题
- oracle基本操作
- oracle物理DG管理-手工主备切换