公告:    欢迎来到王者★孤傲博客主页,若有问题敬请留言 !     没有大量的积累和感悟,是不会把事情做好的, 只有不停的进取,才能够不丢人! Copyright © 2016-2020 RaodiBlogs. All rights reserved.

oracle面向对象数据库的类型创建、表对象创建、以及相关的数据操作

                                        <p>
<a href="http://www.linuxidc.com/topicnews.aspx?tid=12" target="_blank" title="Oracle">Oracle</a>在关系数据库外,融入了面向对象的元素,比如可以创建typetype之间可以继承,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='shennan');

--删除某个人员

delete from persons where first_name='shitou';

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

            </div>
posted @   王者★孤傲  阅读(267)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
亲亲ლ(°◕‵ƹ′◕ლ), 中午的时光真难熬!还好有你在!
点击右上角即可分享
微信分享提示