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;
     }
     
     
     
    }


  • 相关阅读:
    把数据库转化成数据库脚本
    营养瘦身第一菜——金陵素什锦 健康程序员,至尚生活!
    十类好吃不胖的食物 健康程序员,至尚生活!
    一周带饭实录(附作菜菜谱) 健康程序员,至尚生活!
    日常五大习惯有助减肥 健康程序员,至尚生活!
    【暴强】200种好口碑便宜护肤品 健康程序员,至尚生活!
    腹式肠道操 缩胃瘦身有奇效 健康程序员,至尚生活!
    一天4时段喝水轻松瘦身 健康程序员,至尚生活!
    10种不要钱的护肤法则 健康程序员,至尚生活!
    看了这篇你肯定瘦 全身上下想瘦哪就瘦哪 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/1061734.html
Copyright © 2011-2022 走看看