??? 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( ' 小張 ' , ' 女 ' );--可直接調(diào)用
??? ? 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
調(diào)用
match
去和
two
比較
??? ? dbms_output.put_line(k);
??? end ;