如何实现PL/SQL中编写甲骨文数据库分页的存储过程

  介绍

这篇文章主要为大家展示了“如何实现PL/SQL中编写甲骨文数据库分页的存储过程”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现PL/SQL中编写甲骨文数据库分页的存储过程”这篇文章吧。

其实甲骨文数据库的分页还是比较容易理解的。此文以甲骨文数据库中的斯科特用户的EMP表为例,用PL/SQL开发人员编写一个分页存储过程,要求的是:可以输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回的结果集。

由于需要返回查询出来的结果集,需要在PL/SQL中创建一个包,这个包里面定义一个refcursor类型,用于记录SQL语句查询出来的结果集。创建包的代码如下:

create 或是replace  package  pagingPackage  as    type  paging_cursor  is  ref 游标,   最终获得pagingPackage;

接下来开始甲骨文的分页过程,我们可以用选择emp。*,从emp rownum;来显示地表示出每行的行标,然后可以根据行标对内容进行分页,下面这个SQL语句可以作为Oracle分页的模板。

select  *,得到,   (select  t1。*, rownum  rn 得到(select  *,得到emp), t1  where  rownum<=12),   where  rn>=8;

有了上面refcursor的类型和分页模板、下面开始编写分页的存储过程,代码如下:

create  procedure  paging    (tableName  varchar2 拷贝,表名,   pageSizes 拷贝数,每页显示记录数,   pageNow 拷贝数,当前页,   rowNums  out 数量,总记录数,   pageNum  out 数量,总页数,   paging_cursor  out  pagingPackage.paging_cursor), is ,   ——定义部分,   ——定义sql语句、字符串,   v_sql  varchar2 (1000),   ——定义两个整数,用于表示每页的开始和结束记录数,   v_begin 数字:=(pageNow-1) *页大小+ 1,,   v_end 数量:=pageNow *页大小,,   begin    ,,执行部分,   ,v_sql:=& # 39; select  *,得到(select  t1。*, rownum  rn 得到(select  *,得到& # 39;| |表| | & # 39;),t1  where  rownum<=& # 39; | | v_end | | & # 39;), where  rn>=& # 39; | | v_begin;,   ,——把游标和sql语句关联,   ,open  paging_cursor  for  v_sql,   ,,计算rownum和pageNum    ,,组织一个sql语句,   ,v_sql:=& # 39; select  count(*),得到& # 39;| |表名,,   ,,执行该sql语句,并赋给rowNums    ,execute  immediate  v_sql  into  rownum;,   ,,计算pageNum    页大小,if 国防部(rownum)=0, then    pageNum 才能;:=,rownum/页大小,,   else 才能;   ,,pageNum :=, rownum/页大小+ 1,,   ,才能最终获得;如果,   ,,

在Java中编写代码测试分页,代码如下:

package  com.test.oracletest;,   import  java.sql.CallableStatement,   import  java.sql.Connection,   import  java.sql.DriverManager,   import  java.sql.ResultSet,//测试分页,   {public  class  OraclePaging    public 才能;static  void  main (String [], args), {,   ,,,try  {,   ,,,,,//,加载驱动,   ,,,,,forname (“oracle.jdbc.driver.OracleDriver");,   ,,,,,//,获取连接,   ,,,,,Connection  Connection =, DriverManager.getConnection (,   ,,,,,,,,,“jdbc: oracle:薄:@127.0.0.1:1521:ORCL",,“SCOTT",,“tiger"),,   ,,,,,//,创建CallableStatement,调取数据库的存储过程,   ,,,,,CallableStatement  cst =, connection    ,,,,,,,,,.prepareCall (“{call 分页(?,?,?,?,?,?)}“),,   ,,,,,//,给?赋值,   ,,,,,cst.setString (1,“emp"),,   ,,,,,cst.setInt (2, 6),,   ,,,,,cst.setInt (3,, 2),   ,,,,,//,注册存储过程的输出项,   ,,,,,cst.registerOutParameter (4, oracle.jdbc.OracleTypes.INTEGER),,   ,,,,,cst.registerOutParameter (5, oracle.jdbc.OracleTypes.INTEGER),,   ,,,,,cst.registerOutParameter (6, oracle.jdbc.OracleTypes.CURSOR),,   ,,,,,//,执行,   ,,,,,cst.execute (),,   ,,,,,//,获取输出项,   ,,,,,int  rowNums =, cst.getInt; (4),   ,,,,,int  pageNum =, cst.getInt (5),,   ,,,,,ResultSet  rs =,(结果集),cst.getObject (6),,   ,,,,,System.out.println(“总记录数rowNums =,,, +, rownum),,   ,,,,,System.out.println(“总页数pageNum =,,, +, pageNum),,   null   null   null   null   null   null   null   null   null   null   null   null

如何实现PL/SQL中编写甲骨文数据库分页的存储过程