Oracle之面向对象
ORACLE在关系数据库外,融入了面向对象的元素
比如可以创建type,type之间可以继承,
type可以带:
- 构造函数
- 排序函数
- 各种各样的成员函数
- 存储过程
对象表
是指该表的一行就是一个对象,有一个OID(object ID),
对象表之间没有主外键关联的概念,
为了体现这层关系,oracle中用了 ref 对象来实现。
例1
创建一个地址类型,一个人员类型;
人员有地址属性,所以在人员类型中设置一个ref address来确定指向他所在地址的指针。
1 创建地址类型
create type address as object(
street varchar2(35),
city varchar2(15),
state char(2),
zip_code integer
);
2 创建地址对象表
create table obj_address of address;
3 创建人员类型
create type person as object(
first_name varchar2(15),
last_name varchar2(15),
birthday date,
home_address ref address, --指向对应的地址,该地址应该在另外一个对象表中的一行
phone_number varchar2(15)
);
4 创建人员对象表
CREATE TABLE obj_person of person;
5 插入一个地址
insert into obj_address values(address('nanhai','shenzhen','gd','518054'));
insert into obj_address values(address('shennan','shenzhen','gd','518057'));
6 插入一个人员
注意这里的 home_address 部分是如何插入一个ref address的。
insert into obj_person
values(person('shitou',
'haha',
to_date('1982-07-05','yyyy-mm-dd'),
(select ref(a) from obj_address a where street='nanhai'),
'1355555555'
)
);
7 也可以用下面的过程来插入一个人员记录
declare
addref ref address;
begin
select ref(a) into addref from obj_address a where street='nanhai';
insert into obj_person
values (person('shitou',
'haha',
to_date('1982-07-05','yyyy-mm-dd'),
addref,
'1355555555'
)
);
commit;
end;
8 查询某人的地址信息
select first_name,deref(home_address) from obj_person;
9 修改地址
update obj_person
set home_address=(
select ref(a)
from obj_address a
where street='shennan'
);
10 删除某个人员
delete from obj_person
where first_name='shitou';
11 删除某个地址的相关人员记录
delete from obj_person
where home_address=(
select ref(a)
from obj_address a
where street='nanhai'
);