本文转载自:http://www.cnblogs.com/gisdream/archive/2012/04/13/2445291.html

----嵌套表:就是把一个表中的字段定义为一个表,这个字段表的数据存储在外部的一个表中,
      例如下例嵌套表中的数据存储在required_tab表中。
----嵌套表可以有效地代替多个表之间的连接
create type bookobj as object(
title varchar2(40),
author varchar2(40),
catalog_number number(4)
);
/
create type 
booklist as table of bookobj; 
-----------定义一个嵌套表,该表可以被嵌套在其他表中,他的字段就是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'))

(转)oracle嵌套表示例的更多相关文章

  1. Oracle嵌套表

    一.介绍  1.定义 嵌套表是表中之表.一个嵌套表是某些行的集合,它在主表中表示为其中的一列.对主表中的每一条记录,嵌套表可以包含多个行.在某种意义上,它是在一个表中存储一对多关系的一种方法.    ...

  2. oracle 嵌套表

    --自定义对象 CREATE OR REPLACE TYPE Fas_checksheetinfo_line_obj AS OBJECT(  CSID_ID           VARCHAR2(32 ...

  3. 创建oracle数据表示例sql

    CREATE TABLE "BRAND_RELATION"    (        "ID" NUMBER(10,0) NOT NULL ENABLE,    ...

  4. oracle创建表示例

    create table wf_message_weixinqun(dizhi VARCHAR2(200) not null, weixinnicheng VARCHAR2(6) not null,w ...

  5. oracle ibatis 存储过程 返回游标 嵌套表

    自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...

  6. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  7. oracle:变长数组varray,嵌套表,集合

    创建变长数组类型 ) );  这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE ...

  8. oracle 之 数组、嵌套表、SQL查询式 实现多表数据for循环插入指定表

    1.基础环境 创建基础表: CREATE TABLE TEST_TAB1( ID INT, NAME VARCHAR2(20) ); CREATE TABLE TEST_TAB2( ID INT, N ...

  9. Oracle sqlldr使用示例

    SQLLDR用于快速的批量导入数据, 示例步骤如下: 1.确定Oracle的连接示例 username/password@sid 我使用的是:system/world @ localorcl sid是 ...

随机推荐

  1. phpstrom ctrl+s无法上传的问题 解决

    首先这个不教你怎么配置同步FTP,这个教程网上太多了. 主要是配置好了上传,上传的好好的,突然某一天不能上传了,或者配置好了上传不了. 我遇到的问题是,如果你没有点击Use this server a ...

  2. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 "64,000" 实体扩展; 这是应用程序施加的限制

    使用SAX解析XML文件.XML文件有1.5G,程序抛出了这个问题: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法 ...

  3. 随机森林和adaboost算法(待更新)

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器).

  4. st表模板

    http://blog.csdn.net/insistgogo/article/details/9929103 这篇博客讲解的很详细了,求区间最大值也可以用st表,时间复杂度O(n log(n)),查 ...

  5. 卸载MicrosoftBAF(删除C:\CommonFramework\instdata.dat)

    发现有个可疑文件夹 C:\CommonFramework ,而且还会不停的删除创建 C:\CommonFramework\instdata.dat 最后被发现这是必应的一个框架程序在捣鬼,在微软论坛里 ...

  6. SmsUtils 发送短信

    import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import j ...

  7. iframe标签用法详解

      功能:iframe标签用于定义内联框架. 语法:<iframe></iframe> 内联框架是在一个页面中嵌入另一个页面. 有很多网页看上去是一个网页,但实际上它其中可能镶 ...

  8. 【spark】常用转换操作:keys 、values和mapValues

    1.keys 功能: 返回所有键值对的key 示例 val list = List("hadoop","spark","hive",&quo ...

  9. 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象

    3.2.1 什么是KIE KIE(Knowledge Is Everything),知识就是一切的简称.JBoss一系列项目的总称,在<Drools使用概述>章节已经介绍了KIE包含的大部 ...

  10. win7/8 关闭非正常关机的自动修复功能

    win7/8 关闭非正常关机的自动修复功能 1.桌面右键新建一个文档文本,双击打开文件新建文本文档,复制以下命令到文本里面! bcdedit /set {default} bootstatuspoli ...