zoukankan      html  css  js  c++  java
  • db2 通用分页存储过程

    CREATE PROCEDURE DB2ADMIN.PROC_GETPAGE
     (INOUT CURRENTPAGE 
    INTEGER
      
    IN STRSQL VARCHAR(500), 
      
    IN PAGESIZE INTEGER
      OUT TOTALPAGE 
    INTEGER
      OUT TOTALRECORD 
    INTEGER
     ) 
      SPECIFIC DB2ADMIN.SQL080201103307110
      DYNAMIC RESULT SETS 
    1
      LANGUAGE SQL
      
    NOT DETERMINISTIC
      CALLED 
    ON NULL INPUT
      READS SQL DATA
      INHERIT SPECIAL REGISTERS
      
    BEGIN
        
    DECLARE tmpsql   VARCHAR(1000);   -- 主语句
        DECLARE orderFiled VARCHAR(50);
        
    DECLARE s  VARCHAR(1000);
        
    DECLARE v_Start  INTEGER;
        
    DECLARE v_End INTEGER;
        
    DECLARE result CURSOR WITH RETURN TO CALLER FOR S2;
        
        
    SET orderFiled =getOrderField(strsql);
       
        
    if(length(orderFiled )>0then
             
    set orderFiled =' order by ' || orderFiled ;
        
    end if;
        


        
    SET s  =getSQL(strsql);
        
    set tmpsql = 'select count(*) from (' || strsql || ') as a';
        
    prepare s2 from tmpsql;
        
    open result;
            
    fetch result into totalrecord;-- 总记录数
        close result; 
        
        
    if(pagesize = 0then
            
    set pagesize = 20;-- 每页显示数
        end if

        
    set totalPage = (totalrecord - 1/ pagesize + 1;-- 总页数 



        
    if(currentPage < 1then
            
    set currentPage = 1;-- 当前页
        else
            
    if(currentPage > totalPage) then
                
    set currentPage = totalPage;
            
    end if;
        
    end if

        
    set v_Start = (currentPage-1* pagesize ;
        
    set v_End = currentPage * pagesize;


        
    set  tmpsql ='select   *   from   ' ||
               
    '(select   rownumber()   over()   as   row, ' ||
        
    'w.*   from   ( select   *   from   (  ' || s ||    ') n  ' || orderFiled  || ') w)   w1   where   row between '  || char(v_Start ) ||  ' and  '  || char(v_End );
        
        
    prepare s2 from tmpsql ;
        
    open result;
        
    END;

    使用了两个java函数

    import java.util.regex.*;

    import COM.ibm.db2.app.UDF;

    public class FunctionDB2 extends UDF
    {
     public static String getOrderField(String sql)
     {
      Pattern Regex = Pattern.compile("select(.+)order\\s*by\\s*(.+)",
        Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
       Matcher RegexMatcher = Regex.matcher(sql);
       if (RegexMatcher.find()) {
        return RegexMatcher.group(2);
       }
       return "";
     }
     
     public static String getSQL(String sql)
     {
      Pattern Regex = Pattern.compile("(.+)order\\s*by\\s*(.+)",
        Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
       Matcher RegexMatcher = Regex.matcher(sql);
       if (RegexMatcher.find()) {
        return RegexMatcher.group(1);
       }
       return sql;
     }
     
     
     
    }


  • 相关阅读:
    (数据挖掘-入门-6)十折交叉验证和K近邻
    (数据挖掘-入门-5)基于内容的协同过滤与分类
    (数据挖掘-入门-4)基于物品的协同过滤
    (数据挖掘-入门-3)基于用户的协同过滤之k近邻
    (数据挖掘-入门-2)相似度衡量的方法
    (数据挖掘-入门-1)基于用户的协同过滤之最近邻
    SDL播放声音
    清空目录
    yuv转bmp
    ffmpeg解码视频流
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/1061734.html
Copyright © 2011-2022 走看看