DB2通用翻頁存儲過程
作者:笑瘋的天空 
  DB2通用翻頁存儲過程是大家在進(jìn)行數(shù)據(jù)庫操作過程中經(jīng)常會用到的技術(shù),下文中就為大家介紹DB2通用翻頁存儲過程,希望對大家能夠有所幫助。
 在網(wǎng)上眾多翻頁存儲過程中,選擇了一個通用的存儲過程,以下是改成DB2中的翻頁存儲過程:
- CREATE PROCEDURE KYJT.USP_A_FY(IN PTBLNAME VARCHAR(1000), --表名
 - IN PSHOWNAME VARCHAR(1000), -- 需要顯示字段名
 - IN PFLDNAME VARCHAR(1000), --字段名(主表主鍵,不可重復(fù))
 - IN PPAGESIZE INTEGER, -- 頁尺寸 如果為0 默認(rèn)返回前一千萬條數(shù)據(jù) 可以認(rèn)為是返回所有數(shù)據(jù)
 - IN PPAGEINDEX INTEGER,--頁碼
 - IN PORDERTYPE INTEGER, --設(shè)置排序類型, 非 0 值則降序(按主鍵排序)
 - IN PSTRWHERE VARCHAR(1000) --查詢條件 (注意: 不要加 WHERE)
 - )
 - MODIFIES SQL DATA
 - DETERMINISTIC
 - LANGUAGE SQL
 - BEGIN
 - /**//*----------------------------------------------------------------
 - * Copyright (C) 2006 笑瘋
 - * 版權(quán)所有。
 - *
 - * 過程功能描述:
 - * 多功能通用翻頁查詢語句(DB2)
 - *
 - * 創(chuàng)建標(biāo)識:longping520@126.com(2006-5-1修改)
 - *
 - //-----------------------------------------------------------------------*/
 - DECLARE C_STRSQL VARCHAR(6000); -- 主語句
 - DECLARE C_STRTMP VARCHAR(100); -- 臨時變量
 - DECLARE C_STRORDER VARCHAR(400); -- 排序類型
 - DECLARE bill_task CURSOR WITH RETURN TO CALLER FOR S1;
 - --SET PSHOWNAME = PSHOWNAME || ',' || PFLDNAME;
 - IF (PPAGEINDEX=0) THEN
 - SET PPAGEINDEX = 1;
 - END IF;
 - IF (PPAGESIZE=0) THEN
 - SET PPAGESIZE = 10000000;
 - END IF;
 - -- 設(shè)置排序規(guī)則
 - IF (PORDERTYPE<>0) THEN
 - SET C_STRTMP = '<(SELECT MIN';
 - SET C_STRORDER = ' ORDER BY ' || PFLDNAME || ' DESC';
 - ELSE
 - SET C_STRTMP = '>(SELECT MAX';
 - SET C_STRORDER = ' ORDER BY ' || PFLDNAME || ' ASC';
 - END IF;
 - --
 - 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';
 - --
 - IF (PSTRWHERE <> '') THEN
 - 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';
 - END IF;
 - --
 - IF (PPAGEINDEX=1) THEN
 - SET C_STRTMP = '';
 - IF (PSTRWHERE <> '') THEN
 - SET C_STRTMP = ' WHERE ' || PSTRWHERE;
 - END IF;
 - SET C_STRSQL = 'SELECT ' || PSHOWNAME || ' FROM '|| PTBLNAME || ' ' || C_STRTMP || ' ' || C_STRORDER || ' FETCH FIRST ' || CHAR(PPAGESIZE) || ' ROWS ONLY';
 - END IF;
 - PREPARE S1 FROM C_STRSQL;
 - --OPEN C_STRSQL;
 - --EXECUTE S1;
 - OPEN bill_task;
 - END
 
【編輯推薦】
- DB2中可以讀寫的游標(biāo)的定義
 - 如何使用DB2條件處理器處理SQL錯誤
 - 在IBM DB2數(shù)據(jù)庫中進(jìn)行包的重綁定
 - 深入了解IBM DB2數(shù)據(jù)庫的數(shù)據(jù)移動
 
責(zé)任編輯:迎迎 
                    來源:
                    博客園
 














 
 
 
 
 
 
 