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

          主站蜘蛛池模板: 乌拉特中旗| 都安| 五常市| 贵阳市| 濮阳市| 高清| 宁国市| 阜新| 湘潭市| 达尔| 乐东| 隆德县| 琼结县| 桑植县| 延津县| 东辽县| 容城县| 万盛区| 柘荣县| 香河县| 屏山县| 池州市| 金塔县| 诸城市| 拜城县| 峡江县| 略阳县| 饶河县| 保亭| 盘山县| 武鸣县| 阿拉尔市| 犍为县| 岳普湖县| 吴江市| 丰都县| 镇坪县| 观塘区| 白银市| 玛沁县| 绿春县|