博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DB2中通用的存储进程分页法度典范
阅读量:4322 次
发布时间:2019-06-06

本文共 2581 字,大约阅读时间需要 8 分钟。

 

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

转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1975366.html

你可能感兴趣的文章
Java 概述及安装使用
查看>>
helloworld
查看>>
港交所OMD-C对接笔记
查看>>
线程安全问题了解一下
查看>>
转:IPv4的地址真的用光了吗
查看>>
java rmi远程方法调用实例
查看>>
Linux设置环境变量小结
查看>>
syslog()用法
查看>>
Java 内存区域和GC机制
查看>>
STM32上不使用外部晶振,OSC_IN和OSC_OUT的接法
查看>>
设计模式六大原则
查看>>
android中的数据库操作
查看>>
当用updatepanel和scriptmanager时,弹出框
查看>>
如何破解百度云大文件下载限制
查看>>
冒泡排序
查看>>
react中<link>和<navlink>区别
查看>>
C# 生成随机数
查看>>
Psutil模块的应用
查看>>
session概述
查看>>
MATLAB 单变量函数一阶及N阶求导
查看>>