oracle存储过程分页代码

本文介绍了一种使用Oracle存储过程实现的分页查询方法,包括创建存储过程、定义包体及测试代码等内容。该方法通过传入表名、当前页数等参数,返回指定页面的数据、总记录数及总页数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle存储过程分页代码


/*******存储过程分页代码**********/
--包头
create or replace package pck_my is
type c_my is ref cursor;
procedure page_moed(
  v_table in varchar2, --表名
  current_page in out number,--当前页
  pageSize in out number,--页行数
  total out number,--总行数
  countPage out number,--总页数
  c_cursor out pck_my.c_my--游标
  );
end pck_my;

--body
create or replace package body pck_my as
procedure page_moed(
  v_table in varchar2,
  current_page in out number,
  pageSize in out number,
  total out number,
  countPage out number,
  c_cursor out pck_my.c_my
  )is
 
v_sql varchar2(1000);
v_max number;
v_min number;
e_table exception;

begin  
--判断参数
if v_table is null then
  raise e_table;
  --return;
  end if;
if current_page is null then
current_page:=1;
end if;
if pageSize<=0 then
pageSize:=5;
end if; 
--计算 最大行 最小行
v_max:=(current_page+1)*pageSize;
v_min:=current_page*pageSize;

--获取数据
v_sql:= 'select *
  from (select filminfo.*, rownum as t from '|| v_table ||' where rownum <='|| v_max||')
 where t > ' ||v_min;
open c_cursor for v_sql;

--计算总行数
v_sql:='select count(*)  from '|| v_table;
execute immediate v_sql into total;

--计算总页数
if mod(total,pageSize)=0 then
  countPage:=total/pageSize;
else
  countPage:=total/pageSize+1;
end if;

--exception
exception
  when e_table then
   dbms_output.put_line('表名不能为空');

end;
end pck_my;

--  exet
select * from filminfo



java测试代码

package com.rui;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Pckage {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Connection con;
		ResultSet rs;
		CallableStatement cs;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ABC","tenement","rui");

		String sql="{call pck_my.page_moed(?,?,?,?,?,?)}";
		cs=con.prepareCall(sql);
		//指定类型
		
		/* v_table in varchar2,
		  current_page in out number,
		  pageSize in out number,
		  total out number,
		  countPage out number,
		  c_cursor out pck_my.c_my
		*/
		//cs.setString(1, null);
		cs.setString(1, "filminfo");
		cs.setInt(2, 3);
		cs.setInt(3,5);
		cs.registerOutParameter(4,oracle.jdbc.OracleTypes.NUMBER);
		cs.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);
		cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
		cs.execute();
		
		int total=cs.getInt(4);//总行数
		int countPage=cs.getInt(5);//总页数
		rs=(ResultSet)cs.getObject(6);//result
		System.out.println("总行数:"+total+"\t总页数"+countPage);
		System.out.println("------------------------------------");
		while(rs.next()){
	   System.out.println("FILMNAME:"+rs.getString("FILMNAME")+"\tFILMID:"+rs.getInt("FILMID"));
			
		}
		
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值