SQL Server 分頁過程

          SQL?Server?分頁過程

          -----------------------------------------------------
          -- Export file for user SA???????????????????????? --
          -- Created by Administrator on 2005-1-30, 18:05:12 --
          -----------------------------------------------------

          spool asdsd.log

          prompt
          prompt Creating table TEST
          prompt ===================
          prompt
          create table TEST
          (
          ? NAME?? VARCHAR2(20),
          ? PASSWD VARCHAR2(20)
          )
          tablespace USERS
          ? pctfree 10
          ? initrans 1
          ? maxtrans 255
          ? storage
          ? (
          ??? initial 64K
          ??? minextents 1
          ??? maxextents unlimited
          ? );

          prompt
          prompt Creating package DOTNET
          prompt =======================
          prompt
          create or replace package DotNet as

          ? TYPE type_cur IS REF CURSOR;???? --定義游標變量用于返回記錄集

          ? PROCEDURE DotNetPagination(
          ? Pindex in varchar2,??????????????? --分頁索引
          ? Psize in varchar2,???????????????? --頁面大小
          ? Psql in varchar2,??????????????? --產生dataset的sql語句
          ? Pcount out number,?????????????? --返回分頁總數
          ? v_cur out type_cur?????????????? --返回當前頁數據記錄
          ? );
          ?
          ? PROCEDURE DotNetPageRecordsCount(
          ? Psqlcount in varchar2,
          ? Prcount?? out number
          ? );
          ?
          end DotNet;
          /

          prompt
          prompt Creating package PKG_TEST
          prompt =========================
          prompt
          CREATE OR REPLACE PACKAGE pkg_test
          AS
          ?? TYPE myrctype IS REF CURSOR;

          ?? PROCEDURE get (p_id in NUMBER, p_rc OUT myrctype);
          END pkg_test;
          /

          prompt
          prompt Creating package PKG_TEST_FUNCTION
          prompt ==================================
          prompt
          create or replace package pkg_test_function as
          /* 定義ref cursor類型
          ??? 不加return類型,為弱類型,允許動態sql查詢,
          ??? 否則為強類型,無法使用動態sql查詢;
          */
          ?? type myrctype is ref cursor;?
          ??
          --函數申明
          ?? function get(intID number) return myrctype;
          end pkg_test_function;
          /

          prompt
          prompt Creating procedure DOTNETPAGINATION
          prompt ===================================
          prompt
          CREATE OR REPLACE PROCEDURE dotnetpagination (
          ????? pindex?? IN?????? number,
          ????? psize??? IN?????? number,
          ????? psql???? IN?????? VARCHAR2,
          ????? pcount?? OUT????? NUMBER
          ?? )
          ?? IS
          ????? v_sql???? VARCHAR2 (1000);
          ????? v_count?? NUMBER;
          ????? v_plow??? NUMBER;
          ????? v_phei??? NUMBER;
          ?? BEGIN
          ------------------------------------------------------------取分頁總數
          ????? v_sql := 'select count(*) from (' || psql || ')';

          ????? EXECUTE IMMEDIATE v_sql
          ?????????????????? INTO v_count;
          ????? pcount := CEIL (v_count / psize);
          ------------------------------------------------------------顯示任意頁內容
          ????? v_phei := pindex * psize + psize;
          ????? v_plow := v_phei - psize + 1;

          ?? END dotnetpagination;
          /

          prompt
          prompt Creating package body DOTNET
          prompt ============================
          prompt
          CREATE OR REPLACE PACKAGE BODY dotnet
          AS
          --***************************************************************************************
          ?? PROCEDURE dotnetpagination (
          ????? pindex?? IN?????? VARCHAR2,
          ????? psize??? IN?????? VARCHAR2,
          ????? psql???? IN?????? VARCHAR2,
          ????? pcount?? OUT????? NUMBER,
          ????? v_cur??? OUT????? type_cur
          ?? )
          ?? IS
          ????? v_sql???? VARCHAR2 (1000);
          ????? v_count?? NUMBER;
          ????? v_plow??? NUMBER;
          ????? v_phei??? NUMBER;
          ?? BEGIN
          ------------------------------------------------------------取分頁總數
          ????? v_sql := 'select count(*) from (' || psql || ')';

          ????? EXECUTE IMMEDIATE v_sql
          ?????????????????? INTO v_count;
          ????? pcount := CEIL (v_count / psize);
          ------------------------------------------------------------顯示任意頁內容
          ????? v_phei := pindex * psize + psize;
          ????? v_plow := v_phei - psize + 1;
          ????? --Psql := 'select rownum rn,t.* from cd_ssxl t' ;??????????? --要求必須包含rownum字段
          ????? v_sql :='select * from ('|| psql || ') where rownum between '|| v_plow || ' and ' || v_phei;

          ????? OPEN v_cur FOR v_sql;
          ?? END dotnetpagination;

          --**************************************************************************************

          ?procedure DotNetPageRecordsCount(
          ? Psqlcount in varchar2,
          ? Prcount?? out number
          ? )
          ? as

          ?? v_sql varchar2(1000);
          ?? v_prcount number;

          ? begin

          ?? v_sql := 'select count(*) from (' || Psqlcount || ')';
          ?? execute immediate v_sql into v_prcount;
          ?? Prcount := v_prcount;????????????????? --返回記錄總數

          ? end DotNetPageRecordsCount;

          ?--**************************************************************************************
          END dotnet;
          /

          prompt
          prompt Creating package body PKG_TEST
          prompt ==============================
          prompt
          CREATE OR REPLACE PACKAGE BODY pkg_test
          AS
          ?? PROCEDURE get (p_id in NUMBER, p_rc OUT myrctype)
          ?? IS
          ????? sqlstr?? VARCHAR2 (500);
          ?? BEGIN
          ????? IF p_id = 0
          ????? THEN
          ???????? OPEN p_rc FOR
          ??????????? SELECT phone, msg_content, gateid
          ????????????? FROM wwchat_del_log
          ???????????? WHERE ROWNUM < 100;
          ????? ELSE
          ???????? sqlstr :=
          ??????????? 'SELECT phone,msg_content,gateid FROM wwchat_del_log where rownum<100';

          ???????? OPEN p_rc FOR sqlstr USING p_id;
          ????? END IF;
          ?? END get;
          END pkg_test;
          /

          prompt
          prompt Creating package body PKG_TEST_FUNCTION
          prompt =======================================
          prompt
          CREATE OR REPLACE PACKAGE BODY pkg_test_function
          AS
          --函數體
          ?? FUNCTION get (intid NUMBER)
          ????? RETURN myrctype
          ?? IS
          ????? rc?????? myrctype;???????????????????????????????? --定義ref cursor變量
          ????? sqlstr?? VARCHAR2 (500);
          ?? BEGIN
          ????? IF intid = 0
          ????? THEN
          ???????? --靜態測試,直接用select語句直接返回結果
          ???????? OPEN rc FOR
          ??????????? SELECT phone, msg_content, gateid
          ????????????? FROM wwchat_del_log
          ???????????? WHERE ROWNUM < 100;
          ????? ELSE
          ???????? --動態sql賦值,用:w_id來申明該變量從外部獲得
          ???????? sqlstr :=
          ??????????? 'select id,name,sex,address,postcode,birthday from student where id=:w_id';

          ???????? --動態測試,用sqlstr字符串返回結果,用using關鍵詞傳遞參數
          ???????? OPEN rc FOR sqlstr USING intid;
          ????? END IF;

          ????? RETURN rc;
          ?? END get;
          END pkg_test_function;
          /

          posted on 2006-06-01 16:40 【Xine】中文站 閱讀(258) 評論(0)  編輯  收藏 所屬分類: SQL Server

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(8)

          隨筆分類(40)

          隨筆檔案(40)

          文章分類(33)

          文章檔案(34)

          相冊

          BLOG 聯盟

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阳江市| 平舆县| 宝坻区| 修武县| 南阳市| 三穗县| 昭觉县| 库尔勒市| 繁峙县| 望奎县| 育儿| 贵港市| 黄平县| 南投市| 罗田县| 京山县| 淮北市| 宕昌县| 恩平市| 临海市| 博客| 鹤壁市| 金沙县| 泉州市| 双流县| 游戏| 崇仁县| 大新县| 碌曲县| 绥芬河市| 蒲城县| 连云港市| 沙洋县| 武宁县| 三穗县| 故城县| 七台河市| 塔城市| 华蓥市| 伽师县| 大邑县|