oracle中的嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。

通俗地说,嵌套表就是表中的表,把一个表中的字段定义为一个表,这个字段表的数据存储在外部的一个表中。嵌套表可以有效地代替多个表之间的连接。

嵌套表有点类似可变数组,在oracle使用嵌套表是因为可变数组没办法被索引,但是在pg中可以使用gin索引来加速数组的扫描,同时pg也可以实现嵌套表。

https://www.cndba.cn/foucus/article/3885

SQL> CREATE OR REPLACE TYPE type1 AS TABLE OF VARCHAR2(30);

2 /

Type created.

SQL> CREATE TABLE nested_table (id NUMBER, col1 type1)

NESTED TABLE col1 STORE AS col1_tab; 2

Table created.

插入数据:

https://www.cndba.cn/foucus/article/3885

INSERT INTO nested_table VALUES (1, type1('A'));

INSERT INTO nested_table VALUES (2, type1('B', 'C'));

INSERT INTO nested_table VALUES (3, type1('D', 'E', 'F'));

COMMIT;

查询:

https://www.cndba.cn/foucus/article/3885https://www.cndba.cn/foucus/article/3885

SQL> SELECT * FROM nested_table;

ID COL1

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

1 MY_TAB_T('A')

2 MY_TAB_T('B', 'C')

3 MY_TAB_T('D', 'E', 'F')

SQL> SELECT id, COLUMN_VALUE FROM nested_table t1, TABLE(t1.col1) t2;

ID COLUMN_VALUE

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

1 A

2 B

2 C

3 D

3 E

3 F

6 rows selected.

—pg

pg中可以使用数组加上复合类型的方法实现嵌套表。

创建复合类型:https://www.cndba.cn/foucus/article/3885

bill=# create type type1 as (c1 int, c2 int, c3 text, c4 timestamp);

CREATE TYPE

bill=# create table tt1 (id int, info text, nst type1[]);

CREATE TABLE

bill=# insert into tt1 values (1,'test',array['(1,2,"abcde","2018-01-01 12:00:00")'::type1, '(2,3,"abcde123","2018-01-01 12:00:00")'::type1]);

INSERT 0 1

查询:

bill=# select * from tt1;

id | info | nst

----+------+----------------------------------------------------------------------------------

1 | test | {"(1,2,abcde,/"2018-01-01 12:00:00/")","(2,3,abcde123,/"2018-01-01 12:00:00/")"}

(1 row)

我们可以使用unnest函数来拆解数组里面的内容:

bill=# select id,info,unnest(nst) from tt1;

id | info | unnest

----+------+--------------------------------------

1 | test | (1,2,abcde,"2018-01-01 12:00:00")

1 | test | (2,3,abcde123,"2018-01-01 12:00:00")

(2 rows)

bill=# select id,info,(unnest(nst)).* from tt1;

id | info | c1 | c2 | c3 | c4

----+------+----+----+----------+---------------------

1 | test | 1 | 2 | abcde | 2018-01-01 12:00:00

1 | test | 2 | 3 | abcde123 | 2018-01-01 12:00:00

(2 rows)

bill=# select id,info,(unnest(nst)).c1 from tt1;

id | info | c1

----+------+----

1 | test | 1

1 | test | 2

(2 rows)

版权声明:本文为博主原创文章,未经博主允许不得转载。

postgres oracle 兼容,PostgreSQL嵌套表(兼容oracle)相关推荐

  1. oracle数据库插入多表,在Oracle数据库中插入嵌套表

    我是PL/SQL数据库的新学习者,这是一种给apex.oracle.com上的数据库应用指定序列的练习.然后我创建了表格,但是当填充与插入的代码如下所示,应用赋予错误,表你不介意,我需要你的帮助在Or ...

  2. oracle元数据存储在表空间,oracle db中数据和元数据的概念

    本帖最后由 warehouse 于 2014-8-10 11:58 编辑 02年研究dw相关的产品和业务时第一次听说了元数据的概念,很多资料上是这样描述元数据的概念的:元数据是定义或者描述数据的数据. ...

  3. oracle连接多张表优化,oracle 多表查询优化

    ORACLE中的高速缓冲用于保存查询过的sql语句,单只对单表查询起作用 单表查询优化:写查询语句时尽量统一规范,只要有一点不一样,都不能使用高速缓冲. 多表优化: (1)FROM子句后面的表顺序 O ...

  4. oracle创建和删除表空间,oracle 表空间创建和删除

    oracle数据库:数据库对象以及表数据都存储在表空间中,创建用户时可以指定对应的表空间.这样用户可以在各自的表空间中操作数据,互不干扰. 1. 表空间创建 若不清楚表空间对应文件的路径,可以登录系统 ...

  5. oracle 恢复 跳过 表空间,Oracle表空间恢复

    如果误删除了一个表空间中test的数据文件test.dbf,然后下次重新启动数据库的时候发      数据库不能打开了(open), 老是报错:SQL> alter database open; ...

  6. oracle查询字段嵌套子查询,Oracle通过嵌套子查询连接

    您当前的查询似乎与您报告的错误消息或您的表架构不匹配,您的数据类型不匹配,并且您的连接似乎无法获得您想要的信息 - 它可能会得到每个父行的多行,用于开始.在某些版本的Oracle中,还有一些问题是将表 ...

  7. oracle查询多张表交集,Oracle中对两个数据表交集的查询-专栏,ORACLE

    oracle关系型管理系统是世界上流行的关系,它是一个极其强悍.灵活和复杂的系统,据说,在使用oracle时应有这样的观念,那就是在sql中近乎可以推动任何一种想法. 下面向你们介绍使用sql查两个o ...

  8. oracle无会话锁表,深入浅出oracle锁 原理篇 停止无反应的sql会话

    在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些 ...

  9. oracle如何删除物理表空间,oracle 如何删除被误删物理文件的表空间

    oracle 如何删除被误删物理文件的表空间 如何删除alter database ... offline drop掉文件的表空间? QL> connect / as sysdba Connec ...

最新文章

  1. leangoo大讲堂:scrum敏捷开发实战——深圳站
  2. VMware虚拟机上的文件如何和Windows进行共享
  3. Java标识符首字母可以是哪些_Java编程中你不知道的一些标识符有哪些呢?
  4. Vuex 的异步数据更新(小记)
  5. Python爬取js动态添加的内容
  6. 仿真程序驱动视景问题
  7. Storm入门(0)--流计算
  8. 《庆余年》超前点播引发争议,腾讯视频、爱奇艺终于回应了...
  9. tensorflow分类的loss函数_tensorflow中loss函数
  10. python函数式编程 pdf-Python函数式编程指南(二):从函数开始
  11. 企业销售统计管理页面ui模板
  12. 好书推荐之《不能承受的生命之轻》 隐私策略(Privacy policy)
  13. 【neusoft】 Linux 的学习与使用
  14. rip路由协议java_路由协议之RIP
  15. docker学习笔记(10):docker迁移与升级等其它操作
  16. 收集整理的ARM嵌入式linux开发入门视频教程
  17. 【路径规划】基于灰狼算法实现机器人栅格地图路径规划matlab源码
  18. 什么是网络爬虫,网络爬虫有什么用?
  19. 计算机网络——(3)网络体系结构和协议
  20. 集成电路(IC)摩尔定律

热门文章

  1. 今日说“法”:FPGA“可编程” 的 “魅惑”
  2. docker-compose之环境配置以及服务编排文件的使用讲解
  3. 插入排序Java代码实现
  4. 时钟集成电路 Aip8563 MSOP8 简介
  5. Windbg符号无法加载的问题
  6. 计算机学报 ei,ei收录的计算机类核心源:计算机研究与发展计算机学报软件学.docx...
  7. 如何解决Chrome首页被流氓网站劫持的问题
  8. Linux 企业级安全原理和防范技巧
  9. 《GB9706.1 医用电气设备 第1部分:安全通用要求》安规三项实验
  10. 【2020年高被引学者】 冯洋 中科院计算