(转)oracle嵌套表示例
本文转载自: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嵌套表示例的更多相关文章
- Oracle嵌套表
一.介绍 1.定义 嵌套表是表中之表.一个嵌套表是某些行的集合,它在主表中表示为其中的一列.对主表中的每一条记录,嵌套表可以包含多个行.在某种意义上,它是在一个表中存储一对多关系的一种方法. ...
- oracle 嵌套表
--自定义对象 CREATE OR REPLACE TYPE Fas_checksheetinfo_line_obj AS OBJECT( CSID_ID VARCHAR2(32 ...
- 创建oracle数据表示例sql
CREATE TABLE "BRAND_RELATION" ( "ID" NUMBER(10,0) NOT NULL ENABLE, ...
- oracle创建表示例
create table wf_message_weixinqun(dizhi VARCHAR2(200) not null, weixinnicheng VARCHAR2(6) not null,w ...
- oracle ibatis 存储过程 返回游标 嵌套表
自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- oracle:变长数组varray,嵌套表,集合
创建变长数组类型 ) ); 这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE ...
- oracle 之 数组、嵌套表、SQL查询式 实现多表数据for循环插入指定表
1.基础环境 创建基础表: CREATE TABLE TEST_TAB1( ID INT, NAME VARCHAR2(20) ); CREATE TABLE TEST_TAB2( ID INT, N ...
- Oracle sqlldr使用示例
SQLLDR用于快速的批量导入数据, 示例步骤如下: 1.确定Oracle的连接示例 username/password@sid 我使用的是:system/world @ localorcl sid是 ...
随机推荐
- Word Search, 在矩阵中寻找字符串,回溯算法
问题描述: Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...
- scala学习手记5 - 元组与多重赋值
假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [bean.xml]: Invocation of init method failed; nested exception is
在复制xml文件进行修改的时候,我经常将不小心对原文件进行修改,而导致创建bean出错.报错如下所示: Exception sending context initialized event to l ...
- python学习笔记(excel+requests)
已经可以对excel简单的操作后 可以开始通过excel写测试用例 读取用例 执行用例 提前写好execl 如图: 下面是代码: #!/usr/bin/env python # -*- coding: ...
- eclipse中修改工程的Android版本
项目根目录下project.properties的记录项目中所需要的环境信息,比如Android的版本等 project.properties示例如下: [html] view plaincopy # ...
- laravel中Blade模板继承
Blade模板继承 和 区块 <!-- 文件保存于 resources/views/layouts/app.blade.php --> <html> <head> ...
- LeetCode OJ :Unique Binary Search Trees II(唯一二叉搜索树)
题目如下所示:返回的结果是一个Node的Vector: Given n, generate all structurally unique BST's (binary search trees) th ...
- DOM解析XML文件例子
DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...
- DRF 权限的流程
DRF 权限的流程 django rest framework,入口是 dispatch,然后依次 --->>封装请求--->>处理版本--->>>认证--- ...
- CUDA Samples:Vector Add
以下CUDA sample是分别用C++和CUDA实现的两向量相加操作,参考CUDA 8.0中的sample:C:\ProgramData\NVIDIA Corporation\CUDA Sample ...