收藏本站 
广告服务 
网站地图 
>> 我们从网络和杂志上收集了近100000余篇各类电脑技术、网络技术、软件技术等方面的文章教程,我们的收录原则:不是精华拒不收录!
先飞电脑技术网技术文章数据库开发IBM DB2
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |
DB2中通用的存储过程分页程序
[ 作者:佚名    转贴自:网络转载    阅读次数:15    更新时间:2007-9-7 16:14:00   录入:刘光勇 ]        
    本文给出了使用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

文章首页【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“DB2中通用的存储过程分页程序”版权归文章所有者,转载请注明出处!
 ·上一篇文章:了解DB2中实现Oracle的相关功能      ·下一篇文章:详解在DB2上建立数据库分区
相关文章
·详解在DB2上建立数据库分区[101]
·有效创建Oracle dblink的两种方式[70]
·DB2中通用的存储过程分页程序[15]
·轻松使用dbinit来创建Windows CE数据库[47]
·使用ODBC示例来访问Sybase数据库[107]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号