pl/sql过程分页显示小案例 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    pl/sql过程分页显示小案例

    编写一个过程,要求可以输入表名,输入每页显示的记录数,输入当前页,返回总记录数,总页数,和返回的结果集

    --------------------------------------------------------------------- 

    SQL>create or replace package testPackage as type test_cursor(游标名) is ref cursor(游标)

    end testPackage

    SQL>create procedure p8(table_name in varchar2,--表名

    pageSize in number,           --当前显示的记录数

    pageNow in number,--当前页

    --下面都是要返回的内容,其值在过程处理中赋予

    myrows out number,            --总记录数

    myPageCount out number,         --总页数

    p_cursor out testPackage.test_cursor   --返回的结果集

    ) is

    --定义sql语句

    v_sql varchar2(1000);

    v_begin number := (pageNow - 1)*pageSize + 1; -- 每页显示的最少数

    v_end number := pageNow * pageSize;     --每页显示的最大数 

    bgein

    v_sql := 'select * rownum from (SQL>select a1.*,rownum rn from (select name,sal from '||table_name||')

    a1 where rownum<='||v_end||') where rownum>'||v_begin||'';

    open p_cursor for v_sql;                --打开一个游标,将游标和sql语句关联起来

    v_sql : = 'select count(*) from '||table_name'';   --计算myrows和myPageCount

    execute immediate v_sql into myrows ;         --执行sql,并把返回值赋给myrows来记录总记录数

    if mod(myrows,pageSize)= 0 then           --计算总页数,注意思路,很好理解

    myPageCount := myrows/Pagesiez;

    else

    myPageCount := myrows/Pagesiez + 1;

    end if

    close p_cursor;                    --关闭游标 

    end;

    /

    ------------------------------------------------------------------------------------------------------

    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:

    CallableStatement cs = ct.prepareCall("{call p8(?,?,?,?,?,?)}");

    //给?赋值

    cs.setString(1,"myTable");

    sc.setInt(2,5);

    sc.setInt(3,1);

    //给out参数?赋值

    cs.registOutPrameter(4,oracle.jdbc.OracleTypes.INTEGER);//这侧记录总数

    cs.registOutPrameter(5,oracle.jdbc.OracleTypes.INTEGER);//注册总页数

    cs.registOutPrameter(6,oracle.jdbc.OracleTypes.CURSOR);//注册返回的结果集

   

    //执行

    cs.execute();

    //得到结果集

    ResultSet rs = (ResultSet) cs.getObject(6);

    //取出总记录数

    int rowNum = cs.getInt(4);

    //返回总页数

    int pagecount = cs.getInt(5);

    while(rs.next()){

    System.out.println(rs.getInt(1) + "--" + rs.getString(2));

    }

    //关闭相关资源,此处略写

    作者 chunqiuwei

最新文章