• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle中对象表,ref及deref 对象表的使用

mysql 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

ORACLE在关系数据库外,融入了面向对象的元素,比如可以创建type,type之间可以继承,type可以带构造函数、排序函数、各种各样的

Oracle在关系数据库外,融入了面向对象的元素,比如可以创建type,type之间可以继承,type可以带构造函数、排序函数、各种各样的成员函数、存储过程等等。

对象表是指该表的一行就是一个对象,有一个OID(object ID),对象表之间没有主外键关联的概念,为了体现这层关系,,oracle中用了ref对象来实现。

下面例子,创建一个地址类型,一个人员类型,人员有地址属性,所以在人员类型中设置一个ref address来确定指向他所在地址的指针。

–创建地址类型

create type address as object(
street varchar2(35),
city varchar2(15),
state char(2),
zip_code integer
);

create table addresses of address; –创建地址对象表

–创建人员类型
create type person as object(
first_name varchar2(15),
last_name varchar2(15),
birthday date,
home_address ref address, –指向对应的地址,该地址应该在另外一个对象表中的一行
phone_number varchar2(15)
);

CREATE TABLE persons of person; –创建人员对象表

–插入一个地址

insert into addresses values(address(‘nanhai’,’shenzhen’,’gd’,’518054′));

insert into addresses values(address(‘shennan’,’shenzhen’,’gd’,’518057′));

–插入一个人员,注意这里的home_address部分是如何插入一个ref address的。
insert into persons values(person(‘shitou’,’haha’,to_date(‘1982-07-05′,’yyyy-mm-dd’),
(select ref(a) from addresses a where street=’nanhai’),
‘1355555555’));

–也可以用下面的过程来插入一个人员记录

declare
addref ref address ;
begin
select ref(a) into addref from addresses a where street=’nanhai’;
insert into persons
values (person(‘shitou’,’haha’,to_date(‘1982-07-05′,’yyyy-mm-dd’),
addref,’1355555555′));
commit;
end;

–查询某人的地址信息
select first_name,deref(home_address) from persons;

–修改地址
update persons set home_address=(select ref(a) from addresses a where street本文来源gaodaimacom搞#^代%!码&网(=’shennan’);

–删除某个人员

delete from persons where first_name=’shitou’;

–删除某个地址的相关人员记录
delete from persons where home_address=(select ref(a) from addresses a where street=’nanhai’);


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle中对象表,ref及deref 对象表的使用
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址