PostgreSQL Oracle 兼容性之 - rownum

摘要: 标签 PostgreSQL , rownum , Oracle 兼容性 , row_number 窗口 , limit , PPAS , EDB 背景 Oracle ROWNUM是一个虚拟列,每输出一行递增1。

点此查看原文:https://yq.aliyun.com/articles/405183?spm=a2c4e.11153959.teamhomeleft.24.8WKxt7

标签

PostgreSQL , rownum , Oracle 兼容性 , row_number 窗口 , limit , PPAS , EDB

背景

Oracle ROWNUM是一个虚拟列,每输出一行递增1。

Oracle rownum

通常被用于LIMIT输出记录数。

SELECT ROWNUM, empno, ename, job FROM emp WHERE ROWNUM < 5 ORDER BY ename;

rownum | empno | ename | job 
——–+——-+——-+———- 
2 | 7499 | ALLEN | SALESMAN 
4 | 7566 | JONES | MANAGER 
1 | 7369 | SMITH | CLERK 
3 | 7521 | WARD | SALESMAN 
(4 rows) 
或者用于生成序列值。

ALTER TABLE jobhist ADD seqno NUMBER(3); 
UPDATE jobhist SET seqno = ROWNUM; 
SELECT seqno, empno, TO_CHAR(startdate,’DD-MON-YY’) AS start, job FROM jobhist;

seqno | empno | start | job 
——-+——-+———–+———– 
1 | 7369 | 17-DEC-80 | CLERK 
2 | 7499 | 20-FEB-81 | SALESMAN 
3 | 7521 | 22-FEB-81 | SALESMAN 
4 | 7566 | 02-APR-81 | MANAGER 
5 | 7654 | 28-SEP-81 | SALESMAN 
6 | 7698 | 01-MAY-81 | MANAGER 
7 | 7782 | 09-JUN-81 | MANAGER 
8 | 7788 | 19-APR-87 | CLERK 
9 | 7788 | 13-APR-88 | CLERK 
10 | 7788 | 05-MAY-90 | ANALYST 
11 | 7839 | 17-NOV-81 | PRESIDENT 
12 | 7844 | 08-SEP-81 | SALESMAN 
13 | 7876 | 23-MAY-87 | CLERK 
14 | 7900 | 03-DEC-81 | CLERK 
15 | 7900 | 15-JAN-83 | CLERK 
16 | 7902 | 03-DEC-81 | ANALYST 
17 | 7934 | 23-JAN-82 | CLERK 
(17 rows)

PostgreSQL rownum

PostgreSQL 目前没有rownum虚拟列,但是实现同样的功能确很容易:

1、输出行号,使用临时序列

postgres=# create temp sequence if not exists tmp_seq;

postgres=# alter sequence tmp_seq restart with 1;

postgres=# select nextval(‘tmp_seq’) as rownum, * from test limit 10; 
rownum | id | info | crt_time 
——–+—-+——+—————————- 
1 | 1 | test | 2018-01-24 11:06:24.882708 
2 | 2 | test | 2018-01-24 11:06:24.882708 
3 | 3 | test | 2018-01-24 11:06:24.882708 
4 | 4 | test | 2018-01-24 11:06:24.882708 
5 | 5 | test | 2018-01-24 11:06:24.882708 
6 | 6 | test | 2018-01-24 11:06:24.882708 
7 | 7 | test | 2018-01-24 11:06:24.882708 
8 | 8 | test | 2018-01-24 11:06:24.882708 
9 | 9 | test | 2018-01-24 11:06:24.882708 
10 | 10 | test | 2018-01-24 11:06:24.882708 
(10 rows) 
2、输出行号,使用窗口函数

postgres=# select row_number() over () as rownum, * from test limit 10; 
rownum | id | info | crt_time 
——–+—-+——+—————————- 
1 | 1 | test | 2018-01-24 11:06:24.882708 
2 | 2 | test | 2018-01-24 11:06:24.882708 
3 | 3 | test | 2018-01-24 11:06:24.882708 
4 | 4 | test | 2018-01-24 11:06:24.882708 
5 | 5 | test | 2018-01-24 11:06:24.882708 
6 | 6 | test | 2018-01-24 11:06:24.882708 
7 | 7 | test | 2018-01-24 11:06:24.882708 
8 | 8 | test | 2018-01-24 11:06:24.882708 
9 | 9 | test | 2018-01-24 11:06:24.882708 
10 | 10 | test | 2018-01-24 11:06:24.882708 
(10 rows) 
3、LIMIT,直接语法支持

postgres=# select * from test limit 10; 
id | info | crt_time 
—-+——+—————————- 
1 | test | 2018-01-24 11:06:24.882708 
2 | test | 2018-01-24 11:06:24.882708 
3 | test | 2018-01-24 11:06:24.882708 
4 | test | 2018-01-24 11:06:24.882708 
5 | test | 2018-01-24 11:06:24.882708 
6 | test | 2018-01-24 11:06:24.882708 
7 | test | 2018-01-24 11:06:24.882708 
8 | test | 2018-01-24 11:06:24.882708 
9 | test | 2018-01-24 11:06:24.882708 
10 | test | 2018-01-24 11:06:24.882708 
(10 rows) 
4、为某个字段生成序列值。

postgres=# create temp sequence if not exists tmp_seq;

postgres=# alter sequence tmp_seq restart with 1;

postgres=# alter table test add column col1 int; 
ALTER TABLE

postgres=# update test set col1=nextval(‘tmp_seq’); 
UPDATE 10000000

postgres=# select * from test limit 10; 
id | info | crt_time | col1 
—-+——+—————————-+—— 
1 | test | 2018-01-24 11:06:24.882708 | 1 
2 | test | 2018-01-24 11:06:24.882708 | 2 
3 | test | 2018-01-24 11:06:24.882708 | 3 
4 | test | 2018-01-24 11:06:24.882708 | 4 
5 | test | 2018-01-24 11:06:24.882708 | 5 
6 | test | 2018-01-24 11:06:24.882708 | 6 
7 | test | 2018-01-24 11:06:24.882708 | 7 
8 | test | 2018-01-24 11:06:24.882708 | 8 
9 | test | 2018-01-24 11:06:24.882708 | 9 
10 | test | 2018-01-24 11:06:24.882708 | 10 
(10 rows)

PPAS rownum

https://www.enterprisedb.com/docs/en/10.0/Ora_Compat_Dev_Guide/Database_Compatibility_for_Oracle_Developers_Guide.1.021.html#pID0E0AEK0HA

PG的商用发行版本PPAS完全实现了与Oracle一样的rownum功能。

小结

主要看业务到底用Oracle的rownum干什么,才能因地制宜,使用对应的PG语法来支持对应的场景。

当然,目前PG的商用发行版本PPAS(EnterpriseDB)的rownum功能已经完全和Oracle一样了。如果业务上要节约改造时间,使用PPAS是最好的选择。

参考

https://www.enterprisedb.com/docs/en/10.0/Ora_Compat_Dev_Guide/Database_Compatibility_for_Oracle_Developers_Guide.1.021.html#pID0E0AEK0HA

扫描二维码获取更多消息: 
图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND, spin lock, SLEEP进程)

摘要&#xff1a; 标签 PostgreSQL , 分区表 , bind , spin lock , 性能分析 , sleep 进程 , CPU空转 , cache 背景 实际上我写过很多文档&#xff0c;关于分区表的优化&#xff1a; 《PostgreSQL 商用版本EPAS(阿里云ppas) - 分区表性能优化 (堪比pg_pathman)》 《PostgreSQL …

flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析

场景模拟&#xff08;请假流程&#xff09;&#xff1a; 员工申请请假 部门领导审批 人事审批 员工销假 本文用次例介绍在工作流中出现的几个对象及其之间的关系&#xff0c;以及在Activiti中各个对象是如何关联的。 在线演示实例&#xff1a;http://aws.kafeitu.me:8080/kft…

看懂云计算、虚拟化和容器,这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君来源 | 鲜枣课堂“云计算”这个词&#xff0c;相信大家都非常熟悉。作为信息科技发展的主流趋势&#xff0c;它频繁地出现在我们的眼前。伴随它一起出现的&#xff0c;还有这些概念名词——OpenStack、Hypervisor、KVM…

一张图读懂阿里巴巴一站式研发协同云——云效

摘要&#xff1a; 程序员、测试员、项目经理&#xff0c;你们有freestyle吗&#xff1f;阿里云云效&#xff0c;一站式企业协同研发云&#xff0c;“需求->开发->测试->发布->运维->运营”端到端的协同服务和研发工具支撑&#xff0c;助力企业快速创新迭代和研发…

flowable实战(十)flowable 启动流程到完成所有任务之间的数据库变化

来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图&#xff0c;很简单的流程&#xff0c;就是两个UserTask&#xff1a; 代码如下&#xff1a; DeploymentBuilder builderrepositoryService.createDeployment(); Deployment deploymentbui…

阿里敏捷教练如何优化优酷需求分析流程?

摘要&#xff1a; 如何帮助优酷迅速融合到阿里研发体系&#xff1f;如何优化优酷的需求分析流程&#xff1f;针对需求信息不明确&#xff0c;开发出来的功能不是产品想要的痛点如何解决&#xff1f; 点此查看原文&#xff1a;http://click.aliyun.com/m/41381/ 导读&#xff1a…

java float 高效加减_java Double 进行加减乘除

Double 工具类package org.fh.util;import java.io.Serializable;import java.math.BigDecimal;import java.math.RoundingMode;/*** double的计算不精确&#xff0c;会有类似0.0000000000000002的误差&#xff0c;正确的方法是使用BigDecimal或者用整型* 整型地方法适合于货币…

Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

摘要&#xff1a; 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型&#xff0c;被广泛应用于 画像系统 &#xff0c; 标签系统。 在一些业务重建中&#xff0c;对数组内容的定义往往包含了多重含义&#xff0c;例如即包含了标签本身&#xff0c…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要&#xff1a; SQL基础有这些操作&#xff08;按照执行顺序来排列&#xff09;&#xff1a; from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

一、ACT_RU_EXECUTION 表(很多初学者迷惑的一张表&#xff0c;以为是流程实例表&#xff0c;其实它叫执行实例表&#xff09;&#xff1a;这个表和act_run_task表&#xff0c;一起控制了用户任务的产生与完成等。 这个表是工作流程的核心表&#xff0c;这个表会体现主干与分支…

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

摘要&#xff1a; MaxCompute(原ODPS&#xff09;的概念 海量数据处理平台&#xff0c;服务于批量结构化数据的存储和计算&#xff0c;提供海量数据仓库的解决方案以及针对大数据的分析建模服务.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节&a…

计算机视觉领域还能耍什么花样?

从移动支付的自动贩卖机到刷脸支付的智能货柜&#xff1b;从亲自到柜台验证到人脸核身远程开卡&#xff1b;从排队买票、排队进门的糟糕旅游体验到提前预约&#xff0c;刷脸入园的智慧旅游&#xff1b;……从计算机视觉应用的产业板块上分析&#xff0c;以视频应用为基础的视频…

MaxCompute MapReduce

摘要&#xff1a; 大数据计算服务(MaxCompute)的功能详解和使用心得 点此查看原文&#xff1a;http://click.aliyun.com/m/41384/ 前言 MapReduce已经有文档&#xff0c;用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。 功能介绍 MapReduce 说起…

Flowable springboot项目自定义中文字体

Flowable springboot项目自定义中文字体 摘要&#xff1a;在flowable框架中&#xff0c;当我们想要集成springboot框架的时候&#xff0c;可能要设置中文字体&#xff0c;flowable6.4之前的版本因为没有可以设置字体的属性&#xff0c;所以我们没法进行中文字体的设置&#xff…

漫画 | Kubernetes带你一帆风顺去远航

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | Google Cloud如果你是一个狂立学习flag却屡屡打脸的懒癌晚期&#xff0c;或者是一个对云计算方面云里雾里&#xff0c;不知所措的好学者&#xff0c;亦或是一位资深行业专家&#xff0c;都欢迎关注【CSDN云计算公众号】&…

Kubernetes与Docker基本概念与常用命令对照

摘要&#xff1a; Docker是众多用户上手入门的基础容器和编排工具&#xff0c;提供了良好的开发者体验。Kubernetes是强大的容器编排平台&#xff0c;功能丰富。它们有很多概念和操作都有类似之处。我们今天会和大家对比基本概念与常用命令&#xff0c;可以方便熟悉Docker的用户…

flowable 设置流程跟踪高亮线的颜色

背景&#xff1a;在实际情况下&#xff0c;很多人对这个红色的高亮有意见&#xff0c;所以这里我把我的修改颜色的代码分享出来&#xff0c;希望对大家有帮助。&#xff08;如果有问题可以加QQ群&#xff1a;633168411 里面很多高手&#xff0c;人也都非常善良&#xff09; 效果…

连续启动 crash 自修复技术实现与原理解析

摘要&#xff1a; 如果 app 连续 crash 两次无法启动&#xff0c;用户往往会选择卸载。本文介绍如何该类 crash 的自修复技术。 点此查看原文&#xff1a;http://click.aliyun.com/m/41487/ 作者&#xff1a;阿里云-移动云-大前端团队 前言 如果 app 连续 crash 两次无法启动…

舞动的桥 阿里云首个百万IOPS云盘的背后

摘要&#xff1a; 近日&#xff0c;阿里云推出了首个百万IOPS的ESSD云盘服务&#xff0c;性能上有50倍的飞跃&#xff0c;同时还具备超高吞吐、超低时延等特性&#xff0c;在真实业务场景中&#xff0c;PostgreSQL数据库的写入速度快了26倍。 如此超高的性能&#xff0c;有人会…