每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(23)

          隨筆分類(240)

          隨筆檔案(219)

          文章分類(9)

          文章檔案(9)

          收藏夾(15)

          java link

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          key words :Oracle分頁 視圖

          google了一下關(guān)于Oracle的分頁方法,方法還不少,大多數(shù)效果差不多-有點惡心. 惡心也要作,不過后來就是大家都用得這種方式在我這里出現(xiàn)了新問題,奇怪的是怎么沒有別人碰到?

          String condition?=?"?teacher_id?=?"?+?userId?+?"?and?school_id="+siteId;
          sql?
          =
          ???
          "?select * "?+
          ???
          "?from your_table where?"?+?condition?+
          ???
          "?and?rowid?not?in?(?select?rowid?from your_table where"?+?condition?+
          ???
          "?and?rownum?<=?"?+?(pageIndex?-?1)?*?Constants.PAGE_NUMS +?")?"?+
          ???
          "?and?rownum?<=?"?+?Constants.PAGE_NUMS ;

          現(xiàn)在的問題是我需要按照table的某個字段排序,于是改成如下:
          String?condition?=?"?teacher_id?=?"?+?userId?+?"?and?school_id="+siteId;
          sql?
          =
          ????
          "?select?*?"?+
          ????
          "?from?your_table?where?"?+?condition?+
          ????
          "?and?rowid?not?in?(?select?rowid?from?your_table?where"?+?condition?+
          ????
          "?and?rownum?<=?"?+?(pageIndex?-?1)?*?Constants.PAGE_NUMS?+?"order by id desc)?"?+
          ????
          "?and?rownum?<=?"?+?Constants.PAGE_NUMS + " order by id desc";

          這個sql有問題么?
          答案是可能有問題,也可能沒有問題,因為據(jù)說在8i的Oracle版本之前都不行,實際上也不盡然,在我的9i和10g我得到的是同樣的錯誤 "missing right parenthesis",還有一位兄弟估計是DBA建議我去metalink打一個patch,埃,動作太大了,不敢動。

          問題還是要解決,試了下類似于select a.*,rownum r from (select * from table where ...) a where rownum < 10 等的方法,效果一樣,就是不能加嵌套的order by
          最后,用視圖的方法間接解決問題,因為我要解決的問題實際就是按某個字段排序,那么在視圖里先對table進(jìn)行排序,再在視圖的基礎(chǔ)上作操作就OK了.

          另,還有一種不錯的實現(xiàn)方法,即用OracleCachedRowSet,分頁也比較簡單,有點類似于hibernate,由于時間關(guān)系沒有時間去看,感興趣的朋友可以看一下.


          BTW: 對于視圖可能rowid有問題,可以改成視圖的某個主鍵替換

          String?condition?=?"?teacher_id?=?"?+?userId?+?"?and?school_id="+siteId;
          sql?
          =
          ????
          "?select?*?"?+
          ????
          "?from?your_table?where?"?+?condition?+
          ????
          "?and?id?not?in?(?select?id?from?your_table?where"?+?condition?+
          ????
          "?and?rownum?<=?"?+?(pageIndex?-?1)?*?Constants.PAGE_NUMS?+?"order?by?id?desc)?"?+
          ????
          "?and?rownum?<=?"?+?Constants.PAGE_NUMS?+?"?order?by?id?desc";



          posted on 2006-09-20 15:36 Alex 閱讀(1698) 評論(3)  編輯  收藏 所屬分類: dataBase

          評論

          # re: Oracle分頁的一個問題 2006-09-21 11:03 效率
          效率,注意效率.
          如果數(shù)據(jù)在百萬條以上.嵌套將是很痛苦的.  回復(fù)  更多評論
            

          # re: Oracle分頁的一個問題 2006-09-21 15:08 Alex
          效率確實是個問題,問題是在目前所看到的Oracle分頁方案中幾乎都用到了嵌套,有什么別的辦法么?  回復(fù)  更多評論
            

          # re: Oracle分頁的一個問題 2006-09-21 17:32 123bingbing
          看新聞這么麻煩,找資料還是去www.mylinux.com.cn
          www.mylinux.com.cn網(wǎng)上軟件外包流水線,找資料,看新聞,接項目,積分換數(shù)碼產(chǎn)品  回復(fù)  更多評論
            

          主站蜘蛛池模板: 正阳县| 渝北区| 突泉县| 惠安县| 门头沟区| 平安县| 梨树县| 项城市| 司法| 兰溪市| 丰顺县| 德昌县| 桃源县| 富锦市| 长治县| 都安| 于田县| 松潘县| 恩平市| 南平市| 彰化县| 西畴县| 彭水| 奎屯市| 奉节县| 监利县| 井陉县| 徐闻县| 叶城县| 登封市| 湟中县| 宁都县| 叙永县| 环江| 阿荣旗| 富阳市| 廉江市| 毕节市| 得荣县| 陕西省| 房山区|