﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-王三</title><link>http://www.blogjava.net/wangsan/</link><description>终日乾乾</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 00:23:58 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 00:23:58 GMT</pubDate><ttl>60</ttl><item><title>oracle order by page</title><link>http://www.blogjava.net/wangsan/archive/2012/08/23/386106.html</link><dc:creator>王三</dc:creator><author>王三</author><pubDate>Thu, 23 Aug 2012 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/wangsan/archive/2012/08/23/386106.html</guid><wfw:comment>http://www.blogjava.net/wangsan/comments/386106.html</wfw:comment><comments>http://www.blogjava.net/wangsan/archive/2012/08/23/386106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangsan/comments/commentRss/386106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangsan/services/trackbacks/386106.html</trackback:ping><description><![CDATA[<span style="font-family: Arial; color: #0000ff; ">1&gt;:</span><span style="font-family: Arial; color: #0000ff; ">oracle中带排序的分页sql，至少包含三层，若无order by可以两层，通用模板为（hibernate也是采用这种方法）：<br /></span><br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">
<div style="text-align: left;"><span style="font-family: Arial; ">&nbsp; &nbsp; select&nbsp;temp2.*&nbsp;from(</span></div>
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->
<div style="text-align: left;"><span style="font-family: Arial; ">&nbsp; &nbsp; &nbsp; &nbsp; select&nbsp;rownum&nbsp;num,temp1.*&nbsp;from(</span></div>
<div style="text-align: left;"><span style="font-family: Arial; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SQL查询</span></div>
<div style="text-align: left;"><span style="font-family: Arial; ">&nbsp; &nbsp; &nbsp; &nbsp;)&nbsp;temp1&nbsp;where&nbsp;rownum&lt;=?</span></div>
<div style="text-align: left;"><span style="font-family: Arial; ">&nbsp; &nbsp;)temp2 where&nbsp;temp2.num&gt;?</span></div>
</div>
<div style="text-align: left; "><span style="font-family: Arial; "><br />&nbsp; &nbsp; 如果是第一页的分页，可以简化为两层：<br /></span><br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="font-family: Arial; ">&nbsp; &nbsp; select&nbsp;*&nbsp;from(</span><br />
<span style="font-family: Arial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL查询</span><br />
<span style="font-family: Arial; ">&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;where&nbsp;rownum&nbsp;&lt;=?</span></div>
<span style="font-family: Arial; color: #0000ff; "><br />2&gt;:有些特性需要注意：</span><br />
<div><span style="font-family: Arial; ">&nbsp; &nbsp; a：最内层的sql查询中的order by项一定要保证记录的唯一性，否则，若排序字段有重复记录，则分页查询后，翻页后数据会出现重复和缺少，因为oracle没有默认排序一说，mysql的会按主键自然排序（？待确认），导致两次分页查询的order by结果不一致，哎，这样查询时非幂等的。<br /></span><span style="font-family: Arial; ">&nbsp; &nbsp; b：rownum是个很蛋疼的伪列，它的对满足查询条件（不包括&#8220;含有rownum的查询条件&#8221;和&#8220;排序条件&#8221;）的结果集的顺序记录，并且在生成结果集时逐一递增，也就是发现对满足查询条件（不包括&#8220;含有rownum的查询条件&#8221;和&#8220;排序条件&#8221;）&nbsp;的第一条记录，rownum附加为记录上并赋值为（当前结果集的总数+1）1，然后若有rownum查询条件，则使用rownum查询条件来判断，若符合则继续查询，否则舍弃记录，然后接着查询，以此推之，那么rownum一定从1开始，所以对&lt;、&lt;=可以很好支持，对!=可以像&lt;一样诡异支持，对其他的=、&gt;、&gt;=、between...and不为1的不支持了。<br /></span><span style="font-family: Arial; ">&nbsp; &nbsp; c：上面说rownum的赋值是在orderby前面的，所以若要利用好orderby，就必须使用子查询，将orderby语句放在内层无rownum的语句中。</span></div>


</div><img src ="http://www.blogjava.net/wangsan/aggbug/386106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangsan/" target="_blank">王三</a> 2012-08-23 14:37 <a href="http://www.blogjava.net/wangsan/archive/2012/08/23/386106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>