其实前面说的这些,支持9i啊,支持数据类型啊,支持自增长啊,或者是上网搜索就能解决,或者并不需要很高的技术含量。

但是支持分页排序的问题,可是花了我不少时间(净时间2天以上)。

我们知道,在oracle中是使用rownum来实现分页的,需要使用三层嵌套sql,如下

select t3.* from (

select t2.*, rownum as row_num from (

select * from t order by t.id asc

) t2 where rownum<=20

) t3

where t2.row_num>11

order by t3.id asc

如果你对SQL有疑问可以点击这里

而在EFOracleProvider中,生成的sql语句是这个样子的(在调试的时候,sql语句会在输出窗口打印出来)

select t2.* from (

select t.*, rownum as row_num from t where rownum<=20 order by ID asc

) t2 where t2.row_num>10

order by ID asc

所以我们需要在EFOracleProvider中,加入一层嵌套。

我们在EFOracleProvider中搜索"ROWNUM",很容易定位到 SqlGenerator.cs中,Visit(DbSkipExpression e) 实现了分页sql语句。

我们的目标是两层嵌套的sql语句里,再加1层嵌套,我们在

select t.*, rownum as row_num from t order by ID asc

外面加一个outer,主要代码如下

1             SqlSelectStatement outer = new SqlSelectStatement();

2outer.Select.Append("ROWNUM ");

3             outer.Select.Append("AS ");

4             outer.Select.Append(row_numberSymbol);

5             outer.From.Append("( ");

6             outer.From.Append(input);

7             outer.From.AppendLine();

8             outer.From.Append(") ");

9             selectStatementStack.Push(input);

10             symbolTable.EnterScope();

11             var outerSymbol = BuildSymbol(input, e, inputColumns);

12             AddFromSymbol(outer, e.Input.VariableName, outerSymbol);

13             AddDefaultColumns(outer);

14             symbolTable.ExitScope();

15             selectStatementStack.Pop();

其中第6行,就是将原来查询,作为outer.From子句部分。

修改过的EFOracleProvider下载

selectprovider 分页_修改EFOracleProvider——解决分页排序问题相关推荐

  1. php redis 分页查询,redis如何解决分页查询

    我们都知道,通过缓存查询的结果,可以极大的提升系统的服务能力,以及降低底层服务或者是数据库的压力.对于有分页条件的缓存,我们也可以按照不同的分页条件来缓存多个key. 基于SortedSet的分页查询 ...

  2. 动软 mysql 分页_动软.NET 分页存储过程UP_GetRecordByPage

    1, ------------------------------------ --用途:支持任意排序的分页存储过程 --说明: ----------------------------------- ...

  3. sqlserver 分页_四类数据库分页实现方案总结之PG分页实现

    概述 前面介绍了Oracle.mysql.sqlserver的分页实现方案了,所以今天主要介绍一下关于PG的分页实现.传统的精准分页(能获取到总页数并且任意跳转页码)在需要符合条件的记录总数目,不过p ...

  4. java多页码分页_对页码进行分页

    /*** 分页页码 *@paramtotalcount 记录总数 *@paramnum 每页记录数 *@paramindex 当前页码 *@paramparamstr 参数串&隔开,如:a=1 ...

  5. ldaptemplate 分页_长图片如何分页打印?3秒搞定|360浏览器|chrome浏览器

    将永恒君的百宝箱设为星标 精品文章第一时间读 文章里面介绍的是用win自带的"画图"软件来进行设置和调节.这两天又发现一个更棒的技巧,和大家分享一下.这次需要用到的就是平常使用的浏 ...

  6. php手机端分页,destoon修改手机端分页

    1. global.func.php pages函数和listpages函数 函数开头增加 $DT_TOUCH,$newsamplepages变量 global $DT_URL, $DT, $L,$D ...

  7. java jdbc分页_使用JDBC进行分页查询

    package day03; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLExc ...

  8. MySQL分组分页优化_网站分页导航优化:解决标题重复和权重分散

    如果大家有认真的看Alvin's Seo Blog博客中关于分页优化的文章,就可能知道网站分页对SEO会产生一些负面影响,而这些负面影响可能会对网站的用户体验造成一定的障碍,在目前百度非常重视用户体验 ...

  9. java混合分页_坑,MySQL中 order by 与 limit 混用,分页会出现问题!

    在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N. ...

最新文章

  1. 自定义报错返回_Keras编写自定义层--以GroupNormalization为例
  2. LSTM 为何如此有效?这五个秘密是你要知道的
  3. 用友服务器整体迁移--数据库附加
  4. Nginx_负载均衡配置讲解
  5. TypeScript类型检查机制
  6. 673. 最长递增子序列的个数
  7. 尼康d7200拍照_为什么尼康和佳能的全画幅旗舰单反却只有2000多万像素?
  8. leetcode5:最长回文子串
  9. 如何使用数据库可移植性将邮箱数据库还原到新服务器
  10. poj1200 Crazy Search(hash)
  11. NSIS制作安装包实例
  12. 双指针 -- 验证回文串
  13. 10.性能之巅 洞悉系统、企业与云计算 --- 网络
  14. simulink 学习(二)
  15. 使用NFC读卡器模拟加密门禁卡方法,包含小米手环
  16. android 声明一个空数组
  17. Window bat脚本教程
  18. “十三五”电力科技重大发展方向及关键技术
  19. Android开发周报:Android Studio2.0发布、Activity动态创建
  20. DIY BMP类 (接续)

热门文章

  1. 一天一点linux(17):安装与使用Tmux
  2. android-手势-基础知识总结
  3. 无法启动windows安全中心服务
  4. 完全二叉树的判断java,判断二叉树是否为完全二叉树的实例
  5. java 一级缓存,MyBatis一级缓存避坑完全指南
  6. 如何编制试算平衡表_试算平衡表的编制
  7. win8.1 库 计算机,Win8.1资源管理器库丢失?一键轻松找回
  8. go mysql delete_go 操作mysql、增删改查
  9. 进入android数据可视化,Android中的实时数据可视化
  10. 重新制作Docker镜像