??? create
or
replace
type
?person
as
object
????? (
???????
NAME
varchar2
(
10
),
??????? SEX
char
(
2
),
??????? BIRTHDATE
date
,
??????? PLACE
varchar2
(
100
)
????? );
?
??? declare
????? person_one person;
??? begin
????? person_one:=person(
'
張三
'
,
'
男
'
,
date
'
????? dbms_output.put_line(person_one.name);
??? end ;
?
??? create
table
t_person(
????? person_col person,
????? emp_id
number
,
????? dep_id number );
??? commit ;
??? declare
????? person_one person;
??? begin
????? person_one:=person(
'
李四
'
,
'
男
'
,
date
'
????
?
insert
into
t_person
values
(person_one,
12345
,
11
);
????
?
commit
;
??? end ;
???
PERSON_COL(
NAME
, SEX, BIRTHDATE, PLACE)????????? EMP_ID???? DEP_ID
??? ---------------------------------------------??? ---------? ---------
???
PERSON(
'
張三
'
,
'
男
'
,
'11-OCT-08'
,
'
杭州
'
)????????
12345
????????
11
??? PERSON( ' 李四 ' , ' 男 ' , '20-OCT-08' , ' 上海 ' )???????? 12345 ???????? 11
??? PERSON_COL.NAME
??? ----------------
??? 張三
??? 李四
??? create
or
replace
type
person
as
object
????? (
???????
NAME
varchar2
(
10
),
??????? SEX
char
(
2
),
??????? BIRTHDATE
date
,
??????? PLACE
varchar2
(
100
),
???????
member
procedure
chang_name(
name
varchar2
),
???????
static
function
new
(v_name
varchar2
,v_sex
varchar2
)
return
person
????? );
??? create
or
replace
type
body
person
is
????
?
member
procedure
chang_name(
name
varchar2
)
is
???????
begin
????????? self.name:=
name
;
???????
end
chang_name;
????
?
static
function
new
(v_name
varchar2
,v_sex
varchar2
)
return
person
????
?
is
???????
begin
?????????
return
(person(v_name,v_sex,
null
,
null
));
???????
end
new
;
??? end ;
??? declare
????? person_one person;
????? person_two person;
??? begin
????? person_one:=person(
'
李四
'
,
'
男
'
,
date
'
????? person_one.chang_name(
'
王五
'
);
????? dbms_output.put_line(person_one.name);
?
????? person_two:=person.new( ' 小張 ' , ' 女 ' );--可直接調用
????? dbms_output.put_line(person_two.name);
??? end ;
?
??? create
or
replace
type
person
as
object
????? (
???????
NAME
varchar2
(
10
),
??????? SEX
char
(
2
),
??????? BIRTHDATE
date
,
??????? PLACE
varchar2
(
100
),
???????
map
member
function
compare
return
date
????? );
??? create
or
replace
type
body
person
is
????
?
map
member
function
compare
return
date
is
???????
begin
?????????
return
self.birthdate;
???????
end
compare;
??? end ;
??? declare
????? person_one person;
????? person_two person;
??? begin
????? person_one:=person(
'
李四
'
,
'
男
'
,
date
'
????? person_two:=person(
'
小張
'
,
'
女
'
,
date
'
????
?
if
person_one > person_two
then
??????? dbms_output.put_line(person_one.name||
'
比
'
||person_two.name||
'
大
'
);
???????
elsif
person_one < person_two
then
????????? dbms_output.put_line(person_two.name||
'
比
'
||person_one.name||
'
大
'
);
????
?
else
dbms_output.put_line(
'
一樣大
'
);
????
?
end
if
;
??? end ;
??? create
or
replace
type
person
as
object
????? (
???????
NAME
varchar2
(
10
),
??????? SEX
char
(
2
),
??????? BIRTHDATE
date
,
??????? PLACE
varchar2
(
100
),
???????
order
member
function
match(p_person person)
return
integer
????? );
??? create
or
replace
type
body
person
is
????
?
order
member
function
match(p_person person)
return
integer
is
???????
begin
?????????
if
self.birthdate > p_person.birthdate
then
???????????
return
1
;
???????????
elsif
self.birthdate < p_person.birthdate
then
?????????????
return
-
1
;
???????????
else
return
0
;
?????????
end
if
;
???????
end
match;
??? end ;
??? declare
????? person_one person;
????? person_two person;
????? k
int
;
??? begin
????? person_one:=person(
'
李四
'
,
'
男
'
,
date
'
????? person_two:=person(
'
小張
'
,
'
女
'
,
date
'
????? k:=person_one.match(person_two);
--one
調用
match
去和
two
比較
????? dbms_output.put_line(k);
??? end ;