plsql代码:
SQL> create or replace package testpackage as --创建包用来放游标
2 type test_cursor is ref cursor; --定义的游标test_cursor,ref curosr用法还不是很熟
3 end testpackage;
4 /
Package created
SQL> create or replace procedure fenye(
2 v_tablename in varchar2, --输入的表名,根据不同的表来分页
3 v_pagenow in number, --分页时当前页码
4 v_pagesize in number, --每页的页数
5 v_mypagecount out number, --计算出一共多少页
6 v_myrows out number, --计算表中一共多少行
7 p_cursor out testpackage.test_cursor --要输出的游标
8 )
9 is
10 v_sql varchar2(1000);
11 v_begin number:=(v_pagenow-1)*v_pagesize+1; --计算初始页,既从哪页开始
12 v_end number:=v_pagenow*v_pagesize; --计算结束页,既从哪页结束
13 begin --
14 v_sql:='select *
15 from (select b.*,
16 rownum as rn
17 from (select *
18 from '||v_tablename||'
19 order by sal desc) b
20 where rownum<='||v_end||')
21 where rn>='||v_begin;
22 open p_cursor for v_sql;
23 v_sql:='select count(*) from '||v_tablename;
24 execute immediate v_sql into v_myrows;
25 if mod(v_myrows,v_pagesize)=0 then
26 v_mypagecount:=v_myrows/v_pagesize;
27 else
28 v_mypagecount:=v_myrows/v_pagesize+1;
29 end if;
30 --- close p_cursor; //注间不要关闭游标 否则程序读不到数据
31 end;
32 /
Procedure created
java代码:
import java.sql.*;
public class TestProcedure
{
public static void main(String args[]){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORACLE","SCOTT","TIGER");
CallableStatement call=con.prepareCall("{call fenye(?,?,?,?,?,?)}");--分页过程的6个参数
call.setString(1,"emp");
call.setInt(2,3);
call.setInt(3,2);
call.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
call.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
call.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);--输出的游标
call.execute();
int rowNum=call.getInt(4);
int pageCount=call.getInt(5);
//System.out.println("rowNum:"+rowNum);
//System.out.println("pageCount:"+pageCount);
ResultSet rs=(ResultSet) ((OracleCallableStatement)call).getObject(6); --提示有错误
while(rs.next()){
System.out.println("编号:"+rs.getInt(1)+" "+"名字:"+rs.getString(2));
}
rs.close();
con.close();
call.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
分享到:
相关推荐
### Oracle存储过程分页知识点详解 #### 一、Oracle存储过程分页原理及实现方法 在Oracle数据库中,实现分页查询通常有两种方法:一种是使用`ROWNUM`伪列,另一种则是通过存储过程实现。其中,使用存储过程进行...
### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...
本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...
Oracle数据库在处理大数据量查询时,分页查询是一种常见的优化策略,目的是限制返回结果集的大小,加快查询速度,提供更好的用户体验。本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询...
接下来,我们关注`.cs`代码部分,这部分通常涉及到C#后端如何调用Oracle存储过程并处理返回的数据。你可以使用Oracle Managed Data Access (ODP.NET)库来实现。以下是一个简单的示例: ```csharp using Oracle....
通过上述分析和示例,我们可以看到,利用Oracle存储过程进行分页查询不仅可以提高查询效率,还能增强代码的可读性和可维护性。在实际项目中,结合C#等高级语言的应用,可以进一步提升系统的性能和用户体验。
这个通用的存储过程简化了在Oracle中的分页操作,但需要注意的是,如果查询涉及到多表连接,性能可能会受到影响,因为ROWNUM是在查询整个结果集之后应用的。为了优化,可以考虑使用Oracle的ROW_NUMBER()函数配合窗口...
总的来说,Oracle存储过程结合ROWNUM伪列提供了灵活且高效的分页解决方案。通过这种方式,开发者可以方便地在应用程序中实现分页查询,同时保持良好的性能。在实际开发中,你可能需要根据具体的业务需求对这个示例...
总结来说,Oracle分页存储过程是通过动态构造SQL语句,结合输入的分页参数,计算出总页数,并返回指定页的数据。这种方式在处理大量数据时提高了效率,同时也提供了灵活的查询控制。通过包装这些逻辑在存储过程中,...
在Oracle数据库系统中,分页查询是常见的数据检索方式,特别是在大数据量的场景下,它能够帮助用户有效地管理和浏览结果集。"Oracle分页存储过程 终极版"旨在提供一个高效、灵活的解决方案,以应对各种分页查询的...
该方法中,将参数连接字符串,查询的sql语句,指定每页显示多少行,调用成功后,会返回页数,行数,还有查询的结果数据集。 使用说明 1、请先在Oracle数据中新建存储过程 2、修改代码中的相关参数。比如,连接...
最后执行存储过程并处理返回的结果集。 总结:本文详细介绍了 Oracle 存储过程中的分页技术,包括基本的存储过程创建方法、分页逻辑的实现以及如何使用 Java 调用这些存储过程。这些技术对于处理大量数据时非常有用...
这里我们将深入探讨如何利用Oracle的存储过程来实现高效多条件的分页查询。 首先,理解分页的基本原理。分页通常涉及两个关键参数:当前页数(`PAGENUM`)和每页记录数(`RECORDSPERPAGE`)。通过这两个参数,我们...
### Oracle存储过程实现分页查询知识点详解 #### 一、背景与目的 在数据库操作中,分页查询是非常常见的需求之一。特别是在数据量较大的场景下,分页不仅可以提高查询效率,还能改善用户体验。Oracle数据库提供了...
Oracle存储过程是数据库管理系统中用于执行特定数据库操作的预编译SQL和PL/SQL代码集合。在Oracle中,存储过程可以被用来实现复杂的业务逻辑,提高数据库性能,并且减少网络流量。分页查询是数据库应用中常见的功能...
### ORACLE存储过程分页实现详解 在Oracle数据库中,实现数据分页是常见的需求,尤其是在处理大量数据时,为了提高查询效率和响应速度,分页技术显得尤为重要。本文将详细解析如何通过Oracle存储过程来实现分页功能...
分页查询是数据库中的一种查询策略,它将结果集分为多个部分,每次只返回一部分(一页)结果给用户。这通常涉及到两个关键参数:每页的记录数(页面大小)和当前显示的页码。在Oracle中,我们可以使用ROWNUM伪列来...
之前一直用SQL SERVER做项目,但是现在需要用到ORACLE,在网上找了几个都无法正常调用,因此自己写了一个,给大家一起分享,在写的过程中学习到了很多东西,同时也体会到了SQL SERVER和ORACLE中的异同点 在分页存储...
而Oracle的分页SQL语句更为简洁,适合在不支持存储过程或者简单场景下使用。但需要注意的是,Oracle的`ROWNUM`方式在处理有序数据时可能会有性能问题,因为`WHERE ROWNUM`条件可能无法充分利用索引。 在实际应用中...
oracle数据库的查询分页加条件和排序的通用型存储过程,通过将表名以参数的形式传入到存储过程中做到多表通用,也可以是多表关联的sql语句 将其看作一个表也能调用该存储过程,分页只需要传与页数,和每页显示的行数...