Knight of the round table

          wansong

          oracle pagination stored procedure.

          http://zzx0421.javaeye.com/blog/281015

          Oracle 分頁:

          create or replace procedure P_QuerySplit(

          sqlscript varchar2, 表名/SQL語句

          pageSize integer, 每頁記錄數

          pageIndex integer, 當前頁

          totalCount out number, 總記錄數

          totalPage out number, 總頁數

          v_cur out sys_refcursor 返回游標

           

          1. ) is  
          2. /**  
          3. * by chenjianxin 2008-5-3  
          4. *  
          5. */  
          6. v_PageSize number;  
          7. v_PageIndex number;  
          8. v_SQL_Count varchar2(4000);  
          9. v_SQL varchar2(4000);  
          10. v_StartIndex number;  
          11. v_EndIndex number;  
          12. begin  
          13. v_PageSize:=pageSize;  
          14. if v_PageSize=0 then  
          15. v_PageSize:=1;  
          16. end if;  

           

          ibatis調用Oracle分頁存儲過程中需要統計記錄數量

           

          1. v_SQL_Count :'select count(*) from (' ? ? sqlscript ? ?') a ';  
          2. execute immediate v_SQL_Count into totalCount;  

           

          計算總頁數

           

          1. totalPage:=CEIL(totalCount/v_PageSize); 

          驗證頁號 如果頁號大余了最大頁數,返回最后一頁

           

          1. v_PageIndex:=pageIndex;  
          2. if v_PageIndex>totalPage then  
          3. v_PageIndex:=totalPage;  
          4. end if;  

           

          計算開始的Index和結束的Index

           

          1. v_StartIndex:=(v_PageIndex-1)*v_PageSize 1;  
          2. v_EndIndex:=v_PageIndex*v_PageSize;  
          3. v_SQL:='SELECT /* FIRST_ROWS */* FROM (';  
          4. v_SQLv_SQL:=v_SQL ? ?' SELECT A.*, ROWNUM RN ';  
          5. v_SQLv_SQL:=v_SQL ? ?' FROM (' ? ?sqlscript ? ?') A ';  
          6. v_SQLv_SQL:=v_SQL ? ?' WHERE ROWNUM <= ' ? ?v_EndIndex;  
          7. v_SQLv_SQL:=v_SQL ? ?')WHERE RN >= ' ? ?v_StartIndex;  
          8. open v_cur for v_SQL;  
          9. end P_QuerySplit;   



        1. create or replace procedure PageInation(   
        2. p_CURSOR out TESTPACKAGE.Test_CURSOR,   
        3. tableName in varchar2,   
        4. tableResult in varchar2,   
        5. lowerNum in numeric,   
        6. higherNum in numeric   
        7. ) is    
        8. sqls varchar2(2000);   
        9. begin   
        10. sqls :='select * from ( select rownum rownum_,'||tableResult||' from ('||tableName||') row_ where rownum <=' ||higherNum||') where rownum_ >'||lowerNum;    
        11. OPEN p_CURSOR FOR sqls;   
        12. end PageInation;    
        13. posted on 2010-09-13 21:42 w@ns0ng 閱讀(201) 評論(0)  編輯  收藏 所屬分類: Database

          主站蜘蛛池模板: 安义县| 兰州市| SHOW| 潮安县| 焦作市| 岳普湖县| 株洲县| 普宁市| 葫芦岛市| 呈贡县| 武威市| 农安县| 阜宁县| 松滋市| 天等县| 鄯善县| 临夏市| 米脂县| 惠水县| 得荣县| 邛崃市| 巨野县| 龙泉市| 青河县| 保山市| 宝丰县| 阳城县| 色达县| 太仆寺旗| 丽水市| 资源县| 九台市| 长汀县| 昌都县| 中西区| 卢龙县| 莱州市| 衡山县| 隆安县| 随州市| 白银市|