zoukankan      html  css  js  c++  java
  • 使用存储过程进行分页:page by Procedure

    包头:

     1 CREATE OR REPLACE PACKAGE EMP_SIMPLE_DEMO IS
    2
    3 --定义一个游标
    4 TYPE EMP_REF_CURSOR IS REF CURSOR;
    5
    6 /**
    7 *分页存储过程
    8 *要求可以输入表名,每页显示记录数、当前页。返回总记录数,总页数,和返回的结果集。
    9 */
    10 PROCEDURE FENYE(I_TABLENAME IN VARCHAR2, --表名
    11 I_PAGESIZE IN PLS_INTEGER, --页大小
    12 I_PAGENOW IN PLS_INTEGER, --当前页
    13 O_MYROWNUM OUT PLS_INTEGER, --总记录数量
    14 O_PAGECOUNT OUT PLS_INTEGER, --总页数
    15 O_CURSOR OUT EMP_REF_CURSOR --返回的记录集
    16 );
    17 /**
    18 *自定义例外
    19 *如果是SELECT语句会抛出错误,而UPDATE语句则相反。
    20 */
    21 PROCEDURE EX_TEST(I_EMPNO EMP.EMPNO%TYPE);
    22 END EMP_SIMPLE_DEMO;

    包体:

     1 CREATE OR REPLACE PACKAGE BODY EMP_SIMPLE_DEMO IS
    2
    3 /**
    4 *分页存储过程
    5 *要求可以输入表名,每页显示记录数、当前页。返回总记录数,总页数,和返回的结果集。
    6 */
    7 PROCEDURE FENYE(I_TABLENAME IN VARCHAR2, --表名
    8 I_PAGESIZE IN PLS_INTEGER, --页大小
    9 I_PAGENOW IN PLS_INTEGER, --当前页
    10 O_MYROWNUM OUT PLS_INTEGER, --总记录数量
    11 O_PAGECOUNT OUT PLS_INTEGER, --总页数
    12 O_CURSOR OUT EMP_REF_CURSOR --返回的记录集
    13 ) IS
    14 --定义部分
    15 --定义SQL语句 字符串
    16 V_SQL VARCHAR2(1000);
    17 --定义两个整数
    18 V_BEGIN NUMBER := (I_PAGENOW - 1) * I_PAGESIZE + 1; --从第几条开始 查询
    19 V_END NUMBER := I_PAGENOW * I_PAGESIZE; --到第几条结束
    20 BEGIN
    21 --执行部分
    22 --V_SQL := 'SELECT * FROM (SELECT T1.*,ROWNUM RN FROM (SELECT * FROM '|| I_TABLENAME ||') T1 WHERE ROWNUM <= :1) WHERE RN >= :2';
    23 V_SQL := 'SELECT * FROM (SELECT T1.*,ROWNUM RN FROM ' || I_TABLENAME ||
    24 ' T1) TT WHERE TT.RN BETWEEN :1 AND :2';
    25 --打开游标
    26 OPEN O_CURSOR FOR V_SQL
    27 USING V_BEGIN, V_END;
    28 --计算 O_MYROWNUM,O_PAGECOUNT
    29 V_SQL := 'SELECT COUNT(*) FROM ' || I_TABLENAME;
    30 EXECUTE IMMEDIATE V_SQL
    31 INTO O_MYROWNUM;
    32 --计算 O_PAGECOUNT
    33 /* IF MOD(O_MYROWNUM,I_PAGESIZE) = 0 THEN
    34 O_PAGECOUNT := O_MYROWNUM/I_PAGESIZE;
    35 ELSE
    36 O_PAGECOUNT := O_MYROWNUM/I_PAGESIZE + 1;
    37 END IF;*/
    38 O_PAGECOUNT := CEIL(O_MYROWNUM / I_PAGESIZE);
    39 END;
    40 /**
    41 *自定义例外
    42 *如果是SELECT语句会抛出错误,而UPDATE语句则相反。
    43 */
    44 PROCEDURE EX_TEST(I_EMPNO EMP.EMPNO%TYPE) IS
    45 --定义一个例外
    46 MYEX EXCEPTION;
    47 BEGIN
    48 --更新用户SAL
    49 UPDATE EMP SET SAL = SAL + 100 WHERE EMP.EMPNO = I_EMPNO;
    50 --SQL%NOTFOUND这是表示没有UPDATE
    51 --触发MYEX例外
    52 IF SQL%NOTFOUND THEN
    53 RAISE MYEX;
    54 END IF;
    55 EXCEPTION
    56 WHEN MYEX THEN
    57 DBMS_OUTPUT.PUT_LINE('没有更新任何数据');
    58 END;
    59 END EMP_SIMPLE_DEMO;

    ---------------------------------------待续在JAVA中如何调用分页的存储过程--------------------------


    I believe that we are who we choose to be. Nobody‘s going to come and save you, you‘ve got to save yourself. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
  • 相关阅读:
    前后台$.post交互并返回JSON对象
    Hello World
    Jquery表单插件使用
    MyBatis插入语句返回主键值
    $ is not defined与SpringMVC访问静态资源
    MySql查询数据令某字段显示固定值
    更改我的网页默认的暴风影音播放器
    adodb.stream对象的方法/属性
    【顶】Asp无组件生成缩略图 (3)
    关于MD5的加解密
  • 原文地址:https://www.cnblogs.com/caroline/p/2342035.html
Copyright © 2011-2022 走看看