Oracle基础(五)pl/sql进阶(分页过程)(二)

2015-07-24 06:22:17 · 作者: · 浏览: 2
from emp) t1 where rownum<=10;

--在分页的时候,可以

Select *from(

Sql>select t1.*, rownum rn from(select * from emp) t1where rownum<=10;) where rn>=6;

--开发一个包

Create or replace package testpackage as

Typetest_cursur is ref cursor;

End testpackage

5、--编写分写的过程 分页并按工资排序

Create or replace procedure fenye

(tableName 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_endnumber:=Pagenow *Pagesize ;

Begin

--执行部分

v_sql:='Select * from(

Sql>select t1.*, rownum rn from(select * from '||tableName||' order by sal) t1 where rownum<='||v- end||';) where rn>='||v_begin||';'

- -打开游标和sql关联

Open p_cursor for v_sql;

--计算Myrows 和 mypageCount

--组织一个sql

v_sql:='select count(*) from '|tablename|;

--执行sql,并把返回的值,赋给myrows;

Executeimmediate v_sql into myrows;

-计算mypagecount

If mod(myrows,pagesize)=0 then

Mypagecount:=myrows/pagesize;

Else

Mypagecount:=myrows/pagesize+1;

End if;

--关闭游标

Close p_cursor;

End;

--使用java测试

?

Package com.sp;
Importjava.sql.*;
  Public class Test1{
  public static void main(string[] args){
 
 try{
    //1加载驱动    
    Class.forName("Oracle.jdbc.driver.OracleDriver"); 
    Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");
   //2创建callablestatement
   Callablestatement cs=ct.preparecall(“{call fenye(?,?,?,?,?,?)}”);
    //给?赋值
    Cs.setString(1,"emp"); 表
    Cs.setInt(2,5);每页大小
    Cs.setInt(3,2);第2页
    //接受总记录数
    Cs.registerOutParemeter(4,oracle.jdbc.oracleTypes.integer)//执行 
   //注册总页数
   Cs.registerOutParemeter(5,oracle.jdbc.oracleTypes.integer)//执行
   //注册返回的结果集
     Cs.registerOutParemeter(6,oracle.jdbc.oracleTypes.cursor)//执行
    Cs.execute();
    //取出总记录数,这里注意,getint(4)中4是由该参数的位置决定
 
     Int rowNum=cs.getInt(4);
     Int pageCount=cs.getint(5);
     Resultset rs=(resultset)cs.getobject(6);
 
      //显示下是否正确
    System.out.println("rownum="+ rownum);
    System.out.println("总页数:")+pagecount);
    While(rs.next()){
 
         system.out.println("编号:"+rs.getInt(1) +“名字”+rs.getstring(20)+"薪水";
      }
    }
 
   }
  Catch(EXCEPTION E){
    e.printstacktrace();
 
    }
   Finally{
  关闭各个链接
 
    }
 
   }
 
}
看似很复杂一个分页过程,通过一步步由简到繁的分解,由无返回值的存储过程,到有返回值,进而到以集合形式作为返回值的存储过程,加上简单的分页算法,基于pl/sql中包,游标,mod语句,if分支语句,变量的定义,oder by子句组成。学习的过程就是这样,一口一个胖子是不可能的,同样这也是人类认知的一个规律,由简到繁,在遇到复杂的问题要考虑如何将它拆分成简单的,自己熟知的问题,一步步了解。

?