news 2026/2/12 12:33:30

oracle到瀚高rownum替换问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oracle到瀚高rownum替换问题

文章目录

  • 文档用途
  • 详细信息

文档用途

当我们做数据迁移或者应用迁移时,遇到分页的问题是必不可少的,那么Oracle中我们用到rownum来限制显示的行数,在瀚高里面,我们用limit和offset字句限制只取出查询结果的部分行。

如果给出了一个 LIMIT 计数,那么将返回不超过该数字的行(也可能更少些,因为可能查询本身生成的总行数就比较少)。LIMIT ALL和省略 LIMIT子句是一样的。

OFFSET指明在开始返回行之前忽略多少行。OFFSET 0和省略 OFFSET和LIMIT NULL 子句是一样的。如果 OFFSET和 LIMIT 都出现了,那么在计算OFFSET之前先忽略 LIMIT指定的行数。

那么这个转换是如何实现的?详情信息就在下面。

详细信息

rownum替换的问题
(1)大于等于的情况:

删除rownum>=row , 其中row可能是数字或者参数或者函数

<1>select * from test where rownum >= to_number(i_start) ;

转换为

select * from test ;

<2>select * from test where rownum >= to_number(i_start) and rownum <= 10 ;

转换为

select * from test limit 10;

<3>select * from test where ID>10 and rownum >= to_number(i_start);

转换为

select * from test where ID>10 ;

<4>select * from test where rownum >= to_number(i_start) and ID>10 ;

转换为

select * from test where ID>10 ;

(2)没有大于等于的情况:

A)where之后的,限制查询出来的条数(rownum <=number 或者 rownum = 1)

<1>select * from test where rownum <=10 (条件只有rownum)

转换为select * from test limit 10

<2>select * from test where rownum <=10 and ID >5 (有其他条件rownum前边是where)

转换为select * from test where ID >5 limit 10

<3>select * from test where ID >5 and rownum <=10 (有其他条件rownum前边是and或or之类的)

转换为select * from test where ID >5 limit 10

<4>select * from test where ID >5 and rownum <=10 and ID <10 group by id order by id (有其他条件且rownum不在最后一个条件)

转换为select * from test where ID >5 and ID <10 group by id order by id limit 10

<5>select * from test where rownum = 1 (rownum = 1 和rownum<=1逻辑类似可以共用)

转换为select * from test limit 1

第一种只有一个rownum条件的话需要删除where后几种可以归结为一种 就是有其他条件(不限于and,可能有其他关联关键字or或者其他),这种情况需要替换rownum并放到最后(如果有group by或者order by放到它们后边)

如果连接符是<的话,做减一处理

B)select之后的,带别名(可能没有as来连接),查询序号 —> 用row_number() OVER ()来替换

<1>select rownum as row ,t.* from testrownum t ; (别名有as来连接)

转换为:select row_number() OVER () as row ,t.* from testrownum t ;

<2>select rownum row ,t.* from testrownum t ; (别名没有as来连接)

转换为:select row_number() OVER () as row ,t.* from testrownum t ;

C)select之后的,不带别名,查询序号 —> 用row_number() OVER () as rownum来替换

<1>select rownum ,t.* from testrownum t ;(没有别名)

转换为:select row_number() OVER () as rownum ,t.* from testrownum t ;

(3)在update或者delete中ROWNUM问题

<1> update test3 set id = (select id from test2 where id =1 and rownum=1 group by id ) where id = 0 and rownum=1 ;

转化成:

with cte as (select ctid from test3 where id = 0 limit 1)

update test3 set id = (select id from test2 where id =1 group by id limit 1) where ctid in (select ctid from cte) ;

<2> delete from test3 where id=0 and rownum = 1;

转换为:

with cte as (select ctid from test3 where id = 0 limit 1)

delete from test3 where ctid in (select ctid from cte) ;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 21:58:14

1小时速成:用INA226搭建电源监控原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个电源监控系统原型&#xff1a;1. 使用MicroPython和INA226&#xff1b;2. 实时显示电压、电流和功率&#xff1b;3. 简单的OLED界面&#xff1b;4. 数据记录到SD卡&am…

作者头像 李华
网站建设 2026/2/7 1:46:32

NEO4J云安装:快速搭建开发原型环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于云服务的NEO4J快速部署系统&#xff0c;支持Docker容器化部署和云平台一键部署。提供预配置的开发环境模板&#xff0c;包含常用插件和示例数据集&#xff0c;方便开发…

作者头像 李华
网站建设 2026/2/8 17:23:35

智能健身镜开发日记:我用云端GPU省了5万硬件投入

智能健身镜开发日记&#xff1a;我用云端GPU省了5万硬件投入 1. 为什么选择云端GPU做健身镜开发 作为一名硬件创业者&#xff0c;我在开发智能健身镜原型时遇到了一个关键难题&#xff1a;要实现高精度的人体骨骼关键点检测&#xff0c;传统方案需要采购专业GPU设备&#xff…

作者头像 李华
网站建设 2026/2/3 17:33:01

Z-Image-ComfyUI创意激发指南:低成本尝试100种艺术风格

Z-Image-ComfyUI创意激发指南&#xff1a;低成本尝试100种艺术风格 引言&#xff1a;当艺术创作遇上AI 作为一名艺术创作者&#xff0c;你是否经常遇到灵感枯竭的困境&#xff1f;面对空白的画布&#xff0c;脑海中却一片空白&#xff1b;想要尝试新风格&#xff0c;却受限于…

作者头像 李华
网站建设 2026/2/4 2:21:36

1小时搭建淘宝镜像数据分析原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个淘宝镜像数据分析原型系统&#xff0c;要求在1小时内完成。系统需要&#xff1a;1. 基本的商品数据爬取功能&#xff1b;2. 简单的数据清洗和转换&#xff1b;3. 基础…

作者头像 李华
网站建设 2026/2/3 12:38:48

AI如何帮你快速实现PCIE接口开发?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于PCIE 4.0 x8接口的数据采集卡驱动程序。要求包含&#xff1a;1) PCIE设备枚举和初始化代码 2) DMA传输控制逻辑 3) 中断处理机制 4) 寄存器配置界面。使用C语言实现&a…

作者头像 李华