postgres oracle 兼容,PostgreSQL嵌套表(兼容oracle)
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)相关推荐
- oracle数据库插入多表,在Oracle数据库中插入嵌套表
我是PL/SQL数据库的新学习者,这是一种给apex.oracle.com上的数据库应用指定序列的练习.然后我创建了表格,但是当填充与插入的代码如下所示,应用赋予错误,表你不介意,我需要你的帮助在Or ...
- oracle元数据存储在表空间,oracle db中数据和元数据的概念
本帖最后由 warehouse 于 2014-8-10 11:58 编辑 02年研究dw相关的产品和业务时第一次听说了元数据的概念,很多资料上是这样描述元数据的概念的:元数据是定义或者描述数据的数据. ...
- oracle连接多张表优化,oracle 多表查询优化
ORACLE中的高速缓冲用于保存查询过的sql语句,单只对单表查询起作用 单表查询优化:写查询语句时尽量统一规范,只要有一点不一样,都不能使用高速缓冲. 多表优化: (1)FROM子句后面的表顺序 O ...
- oracle创建和删除表空间,oracle 表空间创建和删除
oracle数据库:数据库对象以及表数据都存储在表空间中,创建用户时可以指定对应的表空间.这样用户可以在各自的表空间中操作数据,互不干扰. 1. 表空间创建 若不清楚表空间对应文件的路径,可以登录系统 ...
- oracle 恢复 跳过 表空间,Oracle表空间恢复
如果误删除了一个表空间中test的数据文件test.dbf,然后下次重新启动数据库的时候发 数据库不能打开了(open), 老是报错:SQL> alter database open; ...
- oracle查询字段嵌套子查询,Oracle通过嵌套子查询连接
您当前的查询似乎与您报告的错误消息或您的表架构不匹配,您的数据类型不匹配,并且您的连接似乎无法获得您想要的信息 - 它可能会得到每个父行的多行,用于开始.在某些版本的Oracle中,还有一些问题是将表 ...
- oracle查询多张表交集,Oracle中对两个数据表交集的查询-专栏,ORACLE
oracle关系型管理系统是世界上流行的关系,它是一个极其强悍.灵活和复杂的系统,据说,在使用oracle时应有这样的观念,那就是在sql中近乎可以推动任何一种想法. 下面向你们介绍使用sql查两个o ...
- oracle无会话锁表,深入浅出oracle锁 原理篇 停止无反应的sql会话
在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些 ...
- oracle如何删除物理表空间,oracle 如何删除被误删物理文件的表空间
oracle 如何删除被误删物理文件的表空间 如何删除alter database ... offline drop掉文件的表空间? QL> connect / as sysdba Connec ...
最新文章
- leangoo大讲堂:scrum敏捷开发实战——深圳站
- VMware虚拟机上的文件如何和Windows进行共享
- Java标识符首字母可以是哪些_Java编程中你不知道的一些标识符有哪些呢?
- Vuex 的异步数据更新(小记)
- Python爬取js动态添加的内容
- 仿真程序驱动视景问题
- Storm入门(0)--流计算
- 《庆余年》超前点播引发争议,腾讯视频、爱奇艺终于回应了...
- tensorflow分类的loss函数_tensorflow中loss函数
- python函数式编程 pdf-Python函数式编程指南(二):从函数开始
- 企业销售统计管理页面ui模板
- 好书推荐之《不能承受的生命之轻》 隐私策略(Privacy policy)
- 【neusoft】 Linux 的学习与使用
- rip路由协议java_路由协议之RIP
- docker学习笔记(10):docker迁移与升级等其它操作
- 收集整理的ARM嵌入式linux开发入门视频教程
- 【路径规划】基于灰狼算法实现机器人栅格地图路径规划matlab源码
- 什么是网络爬虫,网络爬虫有什么用?
- 计算机网络——(3)网络体系结构和协议
- 集成电路(IC)摩尔定律
热门文章
- 今日说“法”:FPGA“可编程” 的 “魅惑”
- docker-compose之环境配置以及服务编排文件的使用讲解
- 插入排序Java代码实现
- 时钟集成电路 Aip8563 MSOP8 简介
- Windbg符号无法加载的问题
- 计算机学报 ei,ei收录的计算机类核心源:计算机研究与发展计算机学报软件学.docx...
- 如何解决Chrome首页被流氓网站劫持的问题
- Linux 企业级安全原理和防范技巧
- 《GB9706.1 医用电气设备 第1部分:安全通用要求》安规三项实验
- 【2020年高被引学者】 冯洋 中科院计算