系统中同时使用mysql和oracle数据库,需要保证两边的兼容性。今天测试的同学发现一个oracle版本的bug,经过排查发现是rownum和order by引起的。

原sql如下:

select ACT_NAME_                               "actName",TO_CHAR(END_TIME_, 'yyyy-mm-dd hh24:mi:ss') "endTime"from act_hi_actinstwhere ACT_TYPE_ = 'userTask'and PROC_INST_ID_ in(select t.PROC_INST_ID_from (select *from act_hi_procinstwhere BUSINESS_KEY_ = concat('mkt_cam_audit', #{campaignId})and ROWNUM = 1order by START_TIME_ desc) t)order by  (case when "endTime" is  null then 1 when "endTime" is not null then 0 end), "endTime"

主要问题在子查询里边,子查询大致逻辑是根据时间排序后(将END_TIME_为空的行排在最前面),取出第一行数据,然而在使用条件:

where BUSINESS_KEY_ = concat('mkt_cam_audit', #{campaignId})and ROWNUM = 1

始终得到的不是首行数据。

最后发现问题在于:

oracle中rownum和order by同时使用时,需要将order by放在里层,而rownum=1放在外层,也就是先排序号,再取第一条数据,这和mysql是不一样的,mysql则没有这么麻烦。

修改后sql如下:

    select ACT_NAME_                               "actName",TO_CHAR(END_TIME_, 'yyyy-mm-dd hh24:mi:ss') "endTime"from act_hi_actinstwhere ACT_TYPE_ = 'userTask'and PROC_INST_ID_ in(select *from (select t.PROC_INST_ID_ from (select *from act_hi_procinstwhere BUSINESS_KEY_ = concat('mkt_cam_audit', #{campaignId})order by START_TIME_ desc) t) where ROWNUM = 1)order by  (case when "endTime" is  null then 1 when "endTime" is not null then 0 end), "endTime"

All efforts, only for myself, no longer for others

oracle rownum order by 爬坑相关推荐

  1. centos7安装mysql日志空白_centos7安装Mysql爬坑记录 - G

    centos7安装Mysql爬坑记录 查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装任何 ...

  2. mybatis-generator 详细配置及使用,爬坑记录

    mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...

  3. Django实现一个简单的中间件,不熟悉中间件的爬坑之路

    1.在之前,写过一篇文章,自定义一个简单的中间件,文章链接如下:https://blog.csdn.net/u012561176/article/details/84024073 后面,发现还是有问题 ...

  4. oracle+rownum(),Oracle rownum和row_number()

    rownum 和 row_number()的区别 一. Oracle中的rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依次类推.这个伪字段可以用于限制查询返回的总行数,而 ...

  5. oracle rownum最后的数据,oracle rownum问题

    本帖最后由 dingjun123 于 2011-11-16 20:06 编辑 你根本不了解oracle rownum的用法,详细参考sql reference 发个很久以前写的东西 8.rownum- ...

  6. oracle的rownum的用法,Oracle Rownum用法

    Oracle Rownum用法 Oracle提供了rownum,rownum是一个隐含的(查询结果集)字段,rownum是一个行号,从1开始. rownum隐含字段 select rownum, a. ...

  7. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

  8. Android爬坑之旅:软键盘挡住输入框问题的终极解决方式

    本文由BarryZhang原创,同一时候首发于diycode.cc.barryzhang.com .github.com/barryhappy.非商业转载请注明作者和原文链接. 前言 开发做得久了.总 ...

  9. 【爬坑】在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案

    [爬坑]在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案 参考文章: (1)[爬坑]在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不 ...

最新文章

  1. idea运行jsp显示源码_基于jsp+mysql+Spring+mybatis的SSM在线个人PC电脑商城平台网站系统...
  2. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
  3. 从Storm到Flink,有赞五年实时计算效率提升实践
  4. ip登录打印机怎么打印_不要打印,登录。
  5. office 2003和office 2013同时安装使用的问题
  6. 我的k8s随笔:命令实践
  7. python 条形图 stack_python使用Plotly绘图工具绘制水平条形图
  8. 清除Linux和window等系统的DNS缓存的命令
  9. Intel发6款全新9代i9/i7/i5 CPU:巅峰8核
  10. Tomcat系列(4)——Tomcat 组件及架构详细部分
  11. 【Caffe安装】import caffe时出错:can not find module skimage.io
  12. win10 2016 LTSB
  13. Sqlite数据库对时间进行比较SQL语句
  14. 计算机二级c 试题 答案,200409计算机二级C笔试试题(含答案)
  15. 移除未排序链表中的重复节点,保留最开始出现的节点
  16. zblog php 安装,初级教程:如何安装zblog?zblog单文件安装教程 全程有图
  17. finereport 激活码
  18. PowerPivot——DAX(函数)
  19. 简单聊聊消息队列的事务补偿机制
  20. 莱布尼兹三角形(OJ0082)

热门文章

  1. STC89C52RC
  2. SenecaJS入门
  3. SpringCloud Gateway 通过redis实现限流
  4. HTML做一个简单漂亮的旅游网页(纯html代码)重庆旅游 7页
  5. 【SequoiaDB巨杉数据库】Oma-stopAllNodes
  6. 第一篇 消防法及相关法律法规与消防职业道德
  7. 华为鸿蒙源自那句话,你知道华为“鸿蒙”,却不知道出处吧?出自《山海经》?错...
  8. matlab mcr安装图标,Matlab运行环境MCR安装
  9. 女孩,你为什么不沉住气奋斗
  10. 几种重要的排序算法——交换排序