zoukankan      html  css  js  c++  java
  • DB2中通用的存储进程分页法度典范

     
     
    -
    CREATE PROCEDURE SALES.DB2PAGINATION(IN ITBNAME VARCHAR(2000),-- 表名
              IN ISHOWFIELD VARCHAR(1000),-- 浮现字段
              IN IJOIN VARCHAR(1000),-- 联接条件(如:内联、外联)
              IN IWHERE VARCHAR(2000),-- 盘问条件 (细致: 不要加 WHERE)
              IN IORDER VARCHAR(100),-- 排序条件 (细致: 不要加 ORDER BY)
              IN IPAGESIZE INTEGER,-- 页尺寸 若是为0 默许前往前一百万条数据可以觉得是前往所无数据
             INOUT IOCURRENTPAGEIX INTEGER,-- 输出和输出:以后页
             OUT OPAGESTARTROW INTEGER,-- 输出:以后起头行
             OUT OPAGEENDROW INTEGER,-- 输出:以后完毕行
             OUT OTOTALROWS INTEGER,-- 输出:以后总记录数
             OUT OHASPREVIOUSPAGE INTEGER,-- 输出:可否有上一页
             OUT OHASNEXTPAGE INTEGER,-- 输出:可否有下一页
             OUT OTOTALPAGES INTEGER,-- 输出:总页数
             OUT OERROR VARCHAR(100))-- 输出:错误信息
        RESULT SETS 1
        MODIFIES SQL DATA
        NOT DETERMINISTIC
        LANGUAGE SQL
    BEGIN
    /**//*----------------------------------------------------------------
     * Copyright (C) 2007  Huacius
     * 版权通盘。
     *
     * 存储进程分页
     *
     *
    //-----------------------------------------------------------------------*/
    DECLARE STRSQL   VARCHAR(6000);-- 主语句
    DECLARE result CURSOR WITH RETURN TO CALLER FOR S2;
    DECLARE exit handler FOR sqlexception-- 非常捕捉
    BEGIN
    set OERROR = 'error!';
    END;
    -- BODY start --
    if(iwhere <> '') then
    set iwhere = ' where ' || iwhere;
    end if;
    if(iorder <> '') then
    set iorder = 'order by ' || iorder;
    end if;
    if(ijoin <> '') then
    set ijoin = ' ' || ijoin;
    end if;
     
    set strsql = 'select count(*) from ' || itbname || ijoin || iwhere;
    prepare s2 from strsql;
    open result;
        fetch result into ototalrows;-- 总记录数
        close result;
    if(ipagesize = 0) then
    set ipagesize = 1000000;-- 每页浮现数
    end if;
    set ototalpages = (ototalrows - 1) / ipagesize 1;-- 总页数
    if(iocurrentpageix < 1) then
    set iocurrentpageix = 1;-- 以后页
    else
    if(iocurrentpageix > ototalpages) then
    set iocurrentpageix = ototalpages;
    end if;
    end if;
    set opagestartrow = ipagesize * (iocurrentpageix -1) 1;-- 每页起头数
    if(iocurrentpageix = ototalpages) then
    set opageendrow = ototalrows;-- 每页完毕数
    else
    set opageendrow = ipagesize * iocurrentpageix;
    end if;
    if(iocurrentpageix > 1) then
    set ohaspreviouspage = 1;-- 可否有上一页
    else
    set ohaspreviouspage = 0;
    end if;
    if(iocurrentpageix < ototalpages) then
    set ohasnextpage = 1;-- 可否有下一页
    else
    set ohasnextpage = 0;
    end if;
    set strsql = 'select * from (select rownumber() over(' || iorder || ') as rownum,'
    || ishowfield
    || ' from '
    || itbname
    || ijoin
    || iwhere
    || ') as temp where rownum between ' || rtrim(char(opagestartrow)) || ' and ' || rtrim(char(opageendrow));
    prepare s2 from strsql;
    open result;
    -- BODY end --
    END
     
     
    来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2007/0904/33426.html


    版权声明: 原创作品,许可转载,转载时请务必以超链接形式标明文章 原始情由 、作者信息和本声明。否则将追查法律责任。

  • 相关阅读:
    新手如何运营自媒体?必看!
    公众号停更,短视频岗位暴增,2020年,新媒体人如何更值钱?
    别再费力讨好,先看看你的标题有没有入这些坑!
    经常反思自己的自媒体账号,为什么还只是几百的阅读量?
    文章发布显示“敏感词汇”怎么办?如何提升文章原创率?
    如何利用标题最大化引流,让属于自己原创、混剪视频的推荐量直线上升?
    【转载】JAVA字符串格式化-String.format()的使用
    【转载】浅谈大型网络入侵检测建设
    渗透测试工具 —— Nmap
    【转载】任意用户密码重置的10种常见姿势
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975366.html
Copyright © 2011-2022 走看看