您的位置:首页 > 数据库 > Oracle

oracle进行order by,排序字段值相同时,导致分页数据出现相同,加入rowid的解决方法

2017-11-13 16:35 861 查看
由于项目开发中遇到order by排序有相同的值,导致分页数据总查询出第一页的数据,查了些资料说是要在order by条件后面再加入rowid可以解决这个问题;项目又要兼容多种数据库,所以只能在java中拦截和修改oralce查询语句中order by动态拼接的语句,搞了几小时终于弄好了,基本耗在正则表达式上了,做一下记录

//将sql转小写,方便正则匹配

String strings = sql.toLowerCase();

//order by 正则表达式(适用order by各种排序条件)

String regexp = "order\\s{1,}by\\s{1,}([a-zA-Z0-9_]{1,}(\\sasc|\\sdesc)?\\s{0,},\\s{0,})*[a-zA-Z0-9_]{1,}(\\s{1,}asc|\\s{1,}desc)?";

//替换sql中多个空格

strings = strings.replaceAll("\\s{1,}", " ");

//创建一个匹配模式

Pattern r = Pattern.compile(regexp);

//匹配客串

Matcher m = r.matcher(strings);
while (m.find()) {

//替换order by条件,加入rowid排序

 strings = strings.replaceAll(m.group(0), m.group(0)+",rowid ");

}

//重新拼接新的sql

pagingSelect.append(strings);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle sql order by
相关文章推荐