`

Oracle分页存储过程

 
阅读更多
1.首先创建存储过程的包头,代码如下:
CREATE OR REPLACE PACKAGE Common_Package   as
procedure p_pagintion 
(    
       selectsql in varchar2,       --条件SQL语句    
       curpagenum in number,       --第几页    
       pagesize in number,        --一页显示多少条    
       pagecount out number,      --共几页    
       notecount out number,  --总记录    
       currentPage out SYS_REFCURSOR      --显示页的记录    
); 
end;

2.然后再创建存储过程的包体,代码如下:
CREATE OR REPLACE PACKAGE body Common_Package   as
procedure p_pagintion 
(    
       selectsql in varchar2,       --条件SQL语句    
       curpagenum in number,       --第几页    
       pagesize in number,        --一页显示多少条    
       pagecount out number,      --共几页    
       notecount out number,  --总记录    
       currentPage out SYS_REFCURSOR      --显示页的记录    
) is 
v_pfrist number;    
v_sql varchar2(100);    
v_sql1 varchar2(100);    
v_sql2 varchar2(100);    
v_sql3 varchar2(1000);    
v_notecount number;    
v_min number;    
v_max number; 
begin 
            v_sql:='select count(*) from (' || selectsql || ')';--查询总记录的SQL    
            execute immediate v_sql into v_notecount;--执行SQL把总记录结果得到    
            notecount :=v_notecount;    
            pagecount :=ceil(notecount/pagesize);--求出总页数    
            v_pfrist:=curpagenum;    
            IF(v_pfrist > pagecount)THEN    
            v_pfrist:=pagecount; -- 如果传进来的页数大于最后一页,默认返回最后一页数据    
            end IF;    
            v_max:=v_pfrist*pagesize;--显示页的最大记录排行值    
            v_min:=v_max-pagesize+1;--显示页的最小记录排行值    
            v_sql1:='select * from (select rownum rn,t.* from ';    
            v_sql2:=' t ) where rn between '||v_min||' and '||v_max;    
            v_sql3:=v_sql1||' ( '|| selectsql ||' ) '||v_sql2;--分页SQL    
            open currentPage for v_sql3;    
END p_pagintion; 
end;

3.PL/SQL下的测试代码,不过没有打印出当前页的内容
DECLARE 
  pageCnt int;
  noteCnt int;
  curPage sys_refcursor;
BEGIN
        Common_Package.p_pagintion('select * from Student',1,10,pageCnt,noteCnt,curPage);
        dbms_output.put_line(pageCnt);
        dbms_output.put_line(noteCnt);
END;

4.Java调用测试代码
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.jdbc.OracleTypes;

public class TestOracleProcedure {
	public static void main(String[] args) throws SQLException {
		Connection conn = null;
		ResultSet rs = null;
		CallableStatement cstmt = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:orcl", "Ajita", "123456");
			cstmt = conn.prepareCall("{call Common_Package.p_pagintion(?,?,?,?,?,?)}");
			cstmt.setString(1, "select t.* from BizBusinessBaseInfo t");
			cstmt.setInt(2, 3);
			cstmt.setInt(3, 5);
			cstmt.registerOutParameter(4, OracleTypes.NUMBER);
			cstmt.registerOutParameter(5, OracleTypes.NUMBER);
			cstmt.registerOutParameter(6, OracleTypes.CURSOR);
			cstmt.executeQuery();
			System.out.println("共" + cstmt.getObject(4) + "页");
			System.out.println("共" + cstmt.getObject(5) + "条");
			rs = (ResultSet) cstmt.getObject(6);
			while (rs.next()) {
				System.out.println(rs.getString("BizName") + " -- "
						+ rs.getString("BossProdName") + " -- " + rs.getString("BizStatus"));
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			rs.close();
			cstmt.close();
			conn.close();
		}
	}
}

分享到:
评论

相关推荐

    oracle分页存储过程

    oracle分页存储过程,oracle分页存储过程

    ORACLE分页存储过程

    在分页存储过程中,主要理解了变量的动态赋值和输入输出参数的使用就非常简单了 下面为调用方法: var c_Preccount number; var c_Ppagecount number; var c_cur refcursor; exec proc_SpPag(1,'SELECT * FROM T_...

    Oracle 分页存储过程

    高效多条件 Oracle 分页存储过程 ,快速分页

    Oracle 分页存储过程 终极版

    终极版 分页存储过程 高效 条件 排序 Oracle

    oracle 分页 存储过程

    oracle 分页 存储过程,超级牛的分页存储过程,执行后可以直接实用,分页速度刚刚的

    Oracle 分页存储过程 SQL

    Oracle 分页存储过程 SQL Oracle 分页存储过程 SQL

    Oracle 分页的存储过程

    教你如何在oracle 中创建分页的存储过程

    java调用oracle分页存储过程

    java调用oracle分页存储过程,存储过程保存在sql文件夹下,可以直接运行。 实现了输入表名、每页显示记录数、当前页、排序字段,返回总记录数,总页数,和结果集。

    asp.net使用oracle分页存储过程查询数据

    功能说明 写好oracle的连接字符串和查询语句,调用程序中的方法可以很方便的实现分页功能。该方法中,将参数连接字符串,查询的sql语句,... 效率不是很高,如有高人写出很厉害的分页存储过程,希望您与大家分享。

    带排序的oracle分页存储过程

    几乎每一个WEB应用都会用到分页,因此,将其做得通用高效就变得非常重要了,根据自己的想法用存储过程做了一个分页的存储过程,与大家分享,希望能够通过讨论得到更好的解决方案。 --之所以用存储过程,是因为以后...

    oracle 分页存储过程

    NULL 博文链接:https://kaka100.iteye.com/blog/803218

    Oracle自定义数据分页存储过程

    Oracle分页存储过程,根据指定条件分页 并附上使用示例(C#代码) 注:不能查询视图或者包含distinct、group by、inner join的子句

Global site tag (gtag.js) - Google Analytics