--如果使用子类型初始化,则调用子类型函数
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>