DB2数据库通用存储过程分页程序“大拌菜”


  本文标签:DB2数据库通用

  文章主要描述的是DB2数据库通用存储过程分页程序,假如你在实际操作中遇到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-- DB2数据库通用存储过程分页程序之异常捕获

  1. BEGIN  
  2. set OERROR = error!;  
  3. END;  
  4. -- BODY start --  
  5. if(iwhere <> ) then  
  6. set iwhere =  where  || iwhere;  
  7. end if;  
  8. if(iorder <> ) then  
  9. set iorder = order by  || iorder;  
  10. end if;  
  11. if(ijoin <> ) then  
  12. set ijoin =   || ijoin;  
  13. end if;  
  14. set strsql = select count(*) from  || itbname || ijoin || iwhere;  
  15. prepare s2 from strsql;  
  16. open result;  
  17. 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;-- 是否有下一页

  

  1. else  
  2. set ohasnextpage = 0;  
  3. end if;  
  4. set strsql = select * from (select rownumber() over( || iorder || ) as rownum,  
  5. || ishowfield   
  6. ||  from   
  7. || itbname  
  8. || ijoin  
  9. || iwhere  
  10. || ) as temp where rownum between  || rtrim(char(opagestartrow)) ||  and  || rtrim(char(opageendrow));  
  11. prepare s2 from strsql;  
  12. open result;  
  13. -- BODY end --  
  14. END  

  以上的相关内容就是对DB2数据库通用存储过程分页程序的介绍,望你能有所收获  。