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 '2008-10-11' , ' 杭州 ' );
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 '2008-10-20' , ' 上海 ' );
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 '2008-10-20' , ' 上海 ' );--创建实例
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 '2008-10-20' , ' 上海 ' );
person_two:=person( ' 小张 ' , ' 女 ' , date '2008-10-11' , ' 杭州 ' );
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 '2008-10-20' , ' 上海 ' );
person_two:=person( ' 小张 ' , ' 女 ' , date '2008-10-11' , ' 杭州 ' );
k:=person_one.match(person_two); --one 调用 match 去和 two 比较
dbms_output.put_line(k);
end ;