首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

oracle存储过程分页与回来多结果集

2013-03-26 
oracle存储过程分页与返回多结果集plsql代码: SQL create or replace package testpackage as--创建包用

oracle存储过程分页与返回多结果集
plsql代码:



SQL> create or replace package testpackage as        --创建包用来放游标
  2  type test_cursor is ref cursor;                               --定义的游标test_cursor,ref curosr用法还不是很熟
  3  end testpackage;
  4  /

Package created



SQL> create or replace procedure fenye(
  2                                    v_tablename in varchar2,    --输入的表名,根据不同的表来分页
  3                                    v_pagenow   in number,      --分页时当前页码
  4                                    v_pagesize  in number,       --每页的页数
  5                                    v_mypagecount out number,        --计算出一共多少页
  6                                    v_myrows          out number,        --计算表中一共多少行
  7                                    p_cursor out testpackage.test_cursor      --要输出的游标
  8                                    )
  9  is
10    v_sql   varchar2(1000);
11    v_begin number:=(v_pagenow-1)*v_pagesize+1;   --计算初始页,既从哪页开始
12    v_end   number:=v_pagenow*v_pagesize;              --计算结束页,既从哪页结束


13  begin       --
14    v_sql:='select *
15                 from   (select b.*,
16                                      rownum as rn
17                            from  (select *
18                                      from '||v_tablename||'
19                                      order by sal desc) b
20                            where rownum<='||v_end||')
21                where  rn>='||v_begin;


22    open p_cursor for v_sql;


23    v_sql:='select count(*) from '||v_tablename;
24    execute immediate v_sql into v_myrows;


25    if mod(v_myrows,v_pagesize)=0 then
26    v_mypagecount:=v_myrows/v_pagesize;
27    else
28    v_mypagecount:=v_myrows/v_pagesize+1;
29    end if;


30 ---   close p_cursor;  //注间不要关闭游标 否则程序读不到数据
31  end;
32  /

Procedure created



java代码:



import java.sql.*; public class TestProcedure{   public static void main(String args[]){     try{                  Class.forName("oracle.jdbc.driver.OracleDriver");         Connection con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORACLE","SCOTT","TIGER");         CallableStatement call=con.prepareCall("{call fenye(?,?,?,?,?,?)}");--分页过程的6个参数         call.setString(1,"emp");         call.setInt(2,3);         call.setInt(3,2);         call.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);         call.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);         call.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);--输出的游标         call.execute();         int rowNum=call.getInt(4);         int pageCount=call.getInt(5);        //System.out.println("rowNum:"+rowNum);        //System.out.println("pageCount:"+pageCount);         ResultSet rs=(ResultSet) ((OracleCallableStatement)call).getObject(6);   --提示有错误           while(rs.next()){             System.out.println("编号:"+rs.getInt(1)+" "+"名字:"+rs.getString(2));        }         rs.close();         con.close();         call.close();     }     catch(Exception e){         e.printStackTrace();     }  }}

我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html

热点排行