用户名: 密码: 验证码:           网站地图 高级搜索 RSS订阅 收藏本站
Google
您的位置:首页>>网络编程>>MSSQL>>阅读资讯:DB2中通用的存储过程分页程序

DB2中通用的存储过程分页程序

[ 来源: | 阅读:次 | 更新日期:2007-9-5 00:12:42 | 评论 0 条 | 我要投稿 ]

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,-- 输出:当前总记录数

字串9


         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);-- 主语句 字串8

DECLARE result CURSOR WITH RETURN TO CALLER FOR S2; yueluo.net

DECLARE exit handler FOR sqlexception-- 异常捕获
BEGIN
set OERROR = 'error!';
END;

yueluo.net

-- 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; 字串7

if(ipagesize = 0) then
set ipagesize = 1000000;-- 每页显示数
end if; 字串6

set ototalpages = (ototalrows - 1) / ipagesize + 1;-- 总页数 字串5

if(iocurrentpageix < 1) then
set iocurrentpageix = 1;-- 当前页
else
if(iocurrentpageix > ototalpages) then
set iocurrentpageix = ototalpages;
end if;
end if; 字串9

set opagestartrow = ipagesize * (iocurrentpageix -1) + 1;-- 每页开始数
if(iocurrentpageix = ototalpages) then
set opageendrow = ototalrows;-- 每页结束数
else
set opageendrow = ipagesize * iocurrentpageix;
end if; 字串8

if(iocurrentpageix > 1) then
set ohaspreviouspage = 1;-- 是否有上一页
else
set ohaspreviouspage = 0;
end if;

字串5

if(iocurrentpageix < ototalpages) then
set ohasnextpage = 1;-- 是否有下一页
else
set ohasnextpage = 0;
end if; 字串7

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

字串9

END 字串9


Tags:数据库,DB2,存储过程,分页
责任编辑:
您的评论
用户名:新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为