嵌套表

嵌套表是一种类似于索引表的结构,也可以用于保存多个数据,而且也可以保存复合类型的数据

嵌套表指的是一个数据表定义事同时加入了其他内部表的定义,这一概念是在oracle 8中引入的,它们可以使用SQL进行访问,也可以进行动态扩展。

创建表指定嵌套表存储空间名称

Create table 表名称(

字段名称 类型

……

嵌套表字段名称 嵌套表类型

)NESTED TABLE 嵌套表字段名称 STORE AS 存储空间名称;

定义部门表

DROP TABLE department

Create table department(

Did number,

Deptname varchar(30) not null,

Projects project_nested,

Constraint pk_did primary key(did)

)NESTED TABLE projects STORE AS projects_nested_table;

创建新的对象类型

Create type 类型名称 AS OBJECT(

列名称 数据类型,

列名称 数据类型,

……

列名称 数据类型

);

/

范例:创建一个表示项目类型的对象

Create or replace type kingsql_type as object(

Projectid number,

Projectname varchar(50),

Projectfunds number,

Pubdate date

);

/

CREATE OR REPLACE TYPE kingsql_type AS OBJECT(

projectid NUMBER ,

projectname VARCHAR(50),

projectfunds NUMBER ,

pubdate DATE

) ;

定义嵌套表类型——project_nested

CREATE OR REPLACE TYPE kingsql_nested AS TABLE OF kingsql_type NOT NULL ;

CREATE TABLE department_01 (

did NUMBER ,

deptname VARCHAR(50) NOT NULL ,

qt_column kingsql_nested

) NESTED TABLE qt_column STORE AS kingsql_nested_t1((

projectid NOT NULL ,

projectname NOT NULL ,

projectfunds NOT NULL ,

pubdate NOT NULL)) ;

嵌套表插入数据

insert into department_01 values(

1,--第一列

'hehe1',--第二列

kingsql_nested(kingsql_type(1,'hehe1',1,sysdate),kingsql_type(11,'hehe11',11,sysdate))); 第三列第一行/第三列第二行

插入数据

declare

v1 kingsql_nested:=kingsql_nested(kingsql_type(2,'haha2',2,sysdate));

begin

insert into department_01

values(1,'hehe1',kingsql_nested(kingsql_type(1,'hehe1',1,sysdate),kingsql_type(11,'hehe11',11,sysdate)));

insert into department_01 values(2,'haha2',v1);

end;

/

查询嵌套表数据

select * from the(select department_01.qt_column from department_01 where did=1);

PROJECTID PROJECTNAME     PROJECTFUNDS PUBDATE

---------- -------------------------------------------------- ------------ -------------------

1 hehe1  1  2018-05-21 14:35:32

11 hehe11 11 2018-05-21 14:35:32

select * from the(select department_01.qt_column from department_01 where did=2);

PROJECTID PROJECTNAME PROJECTFUNDS PUBDATE

---------- -------------------------------------------------- ------------ -------------------

2 haha2  2  2018-05-21 14:35:32

select * from the(select department_01.qt_column from department_01 where did=1) where projectid=1;

PROJECTID PROJECTNAME  PROJECTFUNDS PUBDATE

---------- -------------------------------------------------- ------------ -------------------

1 hehe1  1  2018-05-21 14:35:32

直接插入嵌套表数据

insert into the(select department_01.qt_column from department_01 where did=1) values(111,'hehe111',111,sysdate);

Select * from the(select department_01.qt_column from department_01 where did=1);

循环插入一百行

declare
x number:=3;
begin
for x in 3..103 loop
insert into the(select department_01.qt_column from department_01 where did=2) values(x,'hehe',111,sysdate);
end loop;
commit;
end;

直接更新嵌套表数据

update the(select department_01.qt_column from department_01 where did=1) set projectid=1111 where projectid=1;

commit;

select * from the(select department_01.qt_column from department_01 where did=1)

直接删除嵌套表数据

delete the(select department_01.qt_column from department_01 where did=1) where projectid=1111;

commit;

select * from the(select department_01.qt_column from department_01 where did=1);

DROP TABLE department_01 PURGE ; 从回收站删除

嵌套表用法详解(PLSQL)的更多相关文章

  1. 1:CSS中一些@规则的用法小结 2: @media用法详解

    第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下     at-rule ...

  2. oracle数据库定时任务dbms_job的用法详解

    本文来源:Ruthless <oracle数据库定时任务dbms_job的用法详解> 一.dbms_job涉及到的知识点   1.创建job: variable jobno number; ...

  3. 【转】 #define用法详解

    #define用法详解   1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”.被定义为“宏”的标识符称为“宏名”.在编译预处理时,对程序中所有出现的“宏 ...

  4. Vue1.0用法详解

    Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性. 开发环境部署 可参考使用 vue+webpack. 基本用法 1 2 3 ...

  5. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  6. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  7. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  8. jQuery 事件用法详解

    jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...

  9. SVN组成中trunk,branches and tags功能用法详解

    SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...

随机推荐

  1. [Android]Android数据的四种存储方式

    存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...

  2. postman参数获取不到原因

    在使用postman时,会发现经常提示参数错误,然而代码没有问题,仔细一看,原来是粘贴复制参数到postman时,前后有空格.

  3. hdoj:2031

    #include <iostream> #include <string> using namespace std; int main() { int N,R; string ...

  4. 追踪go语言(golang)的新版本新特性【摘抄】

    Go 2.0 新特性展望:详细 go2.0 会有什么新特性呢?下图是一个老外的调侃,他不希望发生这样的事情(please don't make it happen).我倒是希望其中一些实现,比如泛型和 ...

  5. 和我一起学Effective Java之类和接口

    类和接口 使类和成员的可访问性最小 信息隐藏(information hiding)/封装(encapsulation):隐藏模块内部数据和其他实现细节,通过API和其他模块通信,不知道其他模块的内部 ...

  6. python中利用redis构建任务队列(queue)

    Python中的使用标准queue模块就可以建立多进程使用的队列,但是使用redis和redis-queue(rq)模块使这一操作更加简单. Part 1. 比如首先我们使用队列来简单的储存数据:我们 ...

  7. mui---获取入口文件对象

    在做APP的时候,发现在Hbuilder里面,如果是已经加载过的页面,可以通过 plus.webview.getWebviewById(id),拿到加载的页面对象,这里的id默认是url,但是入口文件 ...

  8. 第八天py

    我发现这个老师讲的太基础只是我懒得跳过而已想慢慢听 列表公共功能 索引 切片 for 长度 特有功能 翻转 排序 追加 插入 索引位置 删除

  9. 7.13python多进程

    所以引入了     多进程*(异步) 处理效率高 #!/usr/bin/env python #!--*--coding:utf-8 --*-- #!@Time :2018/7/13 19:26 #! ...

  10. mysql迁移sqlserver

    数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL ...