介绍
这篇文章主要为大家展示了“如何实现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中编写甲骨文数据库分页的存储过程