程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2通用翻頁存儲過程

DB2通用翻頁存儲過程

編輯:DB2教程

在網上眾多翻頁存儲過程中,選擇了一個通用的存儲過程,以下是改成DB2中的翻頁存儲過程:

  1. CREATE PROCEDURE KYJT.USP_A_FY(IN PTBLNAME VARCHAR(1000), --表名  
  2. IN PSHOWNAME VARCHAR(1000), -- 需要顯示字段名  
  3. IN PFLDNAME VARCHAR(1000), --字段名(主表主鍵,不可重復)  
  4. IN PPAGESIZE INTEGER, -- 頁尺寸 如果為0 默認返回前一千萬條數據 可以認為是返回所有數據  
  5. IN PPAGEINDEX INTEGER,--頁碼  
  6. IN PORDERTYPE INTEGER, --設置排序類型, 非 0 值則降序(按主鍵排序)  
  7. IN PSTRWHERE VARCHAR(1000) --查詢條件 (注意: 不要加 WHERE)  
  8. )  
  9. MODIFIES SQL DATA  
  10. DETERMINISTIC  
  11. LANGUAGE SQL  
  12. BEGIN 
  13. /**//*----------------------------------------------------------------  
  14. * Copyright (C) 2006 笑瘋  
  15. * 版權所有。   
  16. *   
  17. * 過程功能描述:  
  18. * 多功能通用翻頁查詢語句(DB2)   
  19. *   
  20. * 創建標識:[email protected](2006-5-1修改)  
  21. *   
  22. //-----------------------------------------------------------------------*/  
  23.  
  24. DECLARE C_STRSQL VARCHAR(6000); -- 主語句  
  25. DECLARE C_STRTMP VARCHAR(100); -- 臨時變量  
  26. DECLARE C_STRORDER VARCHAR(400); -- 排序類型  
  27.  
  28. DECLARE bill_task CURSOR WITH RETURN TO CALLER FOR S1;  
  29.  
  30. --SET PSHOWNAME = PSHOWNAME || ',' || PFLDNAME;  
  31.  
  32. IF (PPAGEINDEX=0) THEN 
  33. SET PPAGEINDEX = 1;  
  34. END IF;  
  35.  
  36. IF (PPAGESIZE=0) THEN 
  37. SET PPAGESIZE = 10000000;  
  38. END IF;  
  39.  
  40. -- 設置排序規則  
  41. IF (PORDERTYPE<>0) THEN 
  42. SET C_STRTMP = '<(SELECT MIN';  
  43. SET C_STRORDER = ' ORDER BY ' || PFLDNAME || ' DESC';  
  44. ELSE 
  45. SET C_STRTMP = '>(SELECT MAX';  
  46. SET C_STRORDER = ' ORDER BY ' || PFLDNAME || ' ASC';  
  47. END IF;  
  48.  
  49. --  
  50. SET C_STRSQL = 'SELECT ' || PSHOWNAME || ' FROM '|| PTBLNAME || ' WHERE ' || PFLDNAME || ' ' || C_STRTMP || '( '|| 'TBLTMP.TTT ) FROM (SELECT ' || PFLDNAME || ' AS TTT FROM ' || PTBLNAME || ' ' || C_STRORDER || ' FETCH FIRST ' || CHAR((PPAGEINDEX-1)*PPAGESIZE) || ' ROWS ONLY) AS TBLTMP)' || C_STRORDER || ' FETCH FIRST ' || CHAR(PPAGESIZE) || ' ROWS ONLY';  
  51. --  
  52. IF (PSTRWHERE <> '') THEN 
  53. SET C_STRSQL = 'SELECT ' || PSHOWNAME || ' FROM '|| PTBLNAME || ' WHERE ' || PFLDNAME || ' ' || C_STRTMP || '( '|| 'TBLTMP.TTT ) FROM (SELECT ' || PFLDNAME || ' AS TTT FROM ' || PTBLNAME || ' WHERE ' || PSTRWHERE || ' '|| C_STRORDER || ' FETCH FIRST ' || CHAR((PPAGEINDEX-1)*PPAGESIZE) || ' ROWS ONLY) AS TBLTMP) AND ' || PSTRWHERE || ' ' || C_STRORDER || ' FETCH FIRST ' || CHAR(PPAGESIZE) || ' ROWS ONLY';  
  54. END IF;  
  55. --  
  56. IF (PPAGEINDEX=1) THEN 
  57.  
  58. SET C_STRTMP = '';  
  59.  
  60. IF (PSTRWHERE <> '') THEN 
  61. SET C_STRTMP = ' WHERE ' || PSTRWHERE;  
  62. END IF;  
  63.  
  64. SET C_STRSQL = 'SELECT ' || PSHOWNAME || ' FROM '|| PTBLNAME || ' ' || C_STRTMP || ' ' || C_STRORDER || ' FETCH FIRST ' || CHAR(PPAGESIZE) || ' ROWS ONLY';  
  65. END IF;  
  66.  
  67. PREPARE S1 FROM C_STRSQL;  
  68. --OPEN C_STRSQL;  
  69. --EXECUTE S1;  
  70. OPEN bill_task;  
  71.  
  72. END 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved