oracle 嵌套表 例子,oracle 嵌套表操作方法

oracle嵌套表示例

--嵌套表:就是把一个表中的字段定义为一个表,这个字段表的数据存储在外部的一个表中,例如下例嵌套表中的数据存储在required_tab表中。

--嵌套表可以有效地代替多个表之间的连接

create type bookobj as object(

title varchar2(40),

author varchar2(40),

catalog_number number(4)

);

--定义一个嵌套表,该表可以被嵌套在其他表中,他的字段就是bookobj中的字段

create type booklist as table of bookobj;

create table course_material(

department char(3),

course number(3),

required_reading booklist --在表中再定义一个表,即booklist表,他就是嵌套在course_material中的表,也就是嵌套表。

--他和主表course_material之间是主从关系,即一条主表记录对应一个嵌套表中的多条记录。

) nested table required_reading store as required_tab;

--给表和嵌套表输入值,commit后被提交到数据库里保存

declare

v_books booklist:=booklist(bookobj('ssss','www',444)); --定义一个booklist类型的嵌套表变量v_books,并给出初值。

begin

insert into course_material values('cs',101,booklist(bookobj('www','bbb',1),bookobj('aa','dd',33)));

insert into course_material values('his',301,v_books);

end;

或单独插入一条记录:

insert into course_material values('ss',102,booklist(bookobj('w','b',1),bookobj('a','d',3)));

--更新嵌套表操作,即将required_reading作为一个字段

declare

v_books booklist:=booklist(bookobj('xyz','bbb',111),bookobj('zq','ccc',222));

begin

update course_material

set required_reading = v_books

where department = 'his' and course = 301;

end;

--执行结果为子记录全部被删除,新添加两个bookobj记录

--删除嵌套表中的记录

delete from course_material where department = 'his';--对应主表his的嵌套表中的记录将被删除

=============直接对嵌套表进行插入==================

insert into the(select required_reading from course_material where department='his' )

values('gog','ggg',999)

--上面红色的表示一个表,注意前面必须加上the,表示是嵌套表。

=============直接对嵌套表进行更新==================

update the(select required_reading from course_material where department='his' )

set catalog_number = catalog_number + 10 --对嵌套表中的字段进行操作

where catalog_number = 111;

=============直接对嵌套表进行删除==================

delete from the(select required_reading from course_material where department='his' )

where catalog_number = 111;

=========================直接进行嵌套表的查询,只能返回主表的一条记录的子表,即如果course_material返回多于2条的记录则报错

select * from the(select required_reading from course_material where department='his');

select * from the(select required_reading from course_material where department='his')

where catalog_number=999

报错:select * from the(select required_reading from course_material

where department in ('his','www'));

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值