`
awaitdeng
  • 浏览: 216469 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle存储过程分页与返回多结果集

 
阅读更多
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存储过程分页原理及实现方法 在Oracle数据库中,实现分页查询通常有两种方法:一种是使用`ROWNUM`伪列,另一种则是通过存储过程实现。其中,使用存储过程进行...

    oracle分页查询并返回总记录数据存储过程

    ### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...

    java Oracle存储过程分页整理

    本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...

    Oracle的分页查询语句 Oracle分页的存储过程

    Oracle数据库在处理大数据量查询时,分页查询是一种常见的优化策略,目的是限制返回结果集的大小,加快查询速度,提供更好的用户体验。本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询...

    Oracle分页+.cs代码+存储过程+Aspnetpager分页控件

    接下来,我们关注`.cs`代码部分,这部分通常涉及到C#后端如何调用Oracle存储过程并处理返回的数据。你可以使用Oracle Managed Data Access (ODP.NET)库来实现。以下是一个简单的示例: ```csharp using Oracle....

    Oracle分页存储过程

    通过上述分析和示例,我们可以看到,利用Oracle存储过程进行分页查询不仅可以提高查询效率,还能增强代码的可读性和可维护性。在实际项目中,结合C#等高级语言的应用,可以进一步提升系统的性能和用户体验。

    通用ORACLE存储过程实现分页和查询

    这个通用的存储过程简化了在Oracle中的分页操作,但需要注意的是,如果查询涉及到多表连接,性能可能会受到影响,因为ROWNUM是在查询整个结果集之后应用的。为了优化,可以考虑使用Oracle的ROW_NUMBER()函数配合窗口...

    oracle 存储过程分页示例

    总的来说,Oracle存储过程结合ROWNUM伪列提供了灵活且高效的分页解决方案。通过这种方式,开发者可以方便地在应用程序中实现分页查询,同时保持良好的性能。在实际开发中,你可能需要根据具体的业务需求对这个示例...

    Oracle 分页的存储过程

    总结来说,Oracle分页存储过程是通过动态构造SQL语句,结合输入的分页参数,计算出总页数,并返回指定页的数据。这种方式在处理大量数据时提高了效率,同时也提供了灵活的查询控制。通过包装这些逻辑在存储过程中,...

    Oracle 分页存储过程 终极版

    在Oracle数据库系统中,分页查询是常见的数据检索方式,特别是在大数据量的场景下,它能够帮助用户有效地管理和浏览结果集。"Oracle分页存储过程 终极版"旨在提供一个高效、灵活的解决方案,以应对各种分页查询的...

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

    该方法中,将参数连接字符串,查询的sql语句,指定每页显示多少行,调用成功后,会返回页数,行数,还有查询的结果数据集。 使用说明 1、请先在Oracle数据中新建存储过程 2、修改代码中的相关参数。比如,连接...

    oracle存储过程分页

    最后执行存储过程并处理返回的结果集。 总结:本文详细介绍了 Oracle 存储过程中的分页技术,包括基本的存储过程创建方法、分页逻辑的实现以及如何使用 Java 调用这些存储过程。这些技术对于处理大量数据时非常有用...

    Oracle 分页存储过程

    这里我们将深入探讨如何利用Oracle的存储过程来实现高效多条件的分页查询。 首先,理解分页的基本原理。分页通常涉及两个关键参数:当前页数(`PAGENUM`)和每页记录数(`RECORDSPERPAGE`)。通过这两个参数,我们...

    oracle 存储过程分页

    ### Oracle存储过程实现分页查询知识点详解 #### 一、背景与目的 在数据库操作中,分页查询是非常常见的需求之一。特别是在数据量较大的场景下,分页不仅可以提高查询效率,还能改善用户体验。Oracle数据库提供了...

    oracle存储过程分页.docx

    Oracle存储过程是数据库管理系统中用于执行特定数据库操作的预编译SQL和PL/SQL代码集合。在Oracle中,存储过程可以被用来实现复杂的业务逻辑,提高数据库性能,并且减少网络流量。分页查询是数据库应用中常见的功能...

    ORACLE存储过程分页

    ### ORACLE存储过程分页实现详解 在Oracle数据库中,实现数据分页是常见的需求,尤其是在处理大量数据时,为了提高查询效率和响应速度,分页技术显得尤为重要。本文将详细解析如何通过Oracle存储过程来实现分页功能...

    Oracle 高效分页存储过程(修改)

    分页查询是数据库中的一种查询策略,它将结果集分为多个部分,每次只返回一部分(一页)结果给用户。这通常涉及到两个关键参数:每页的记录数(页面大小)和当前显示的页码。在Oracle中,我们可以使用ROWNUM伪列来...

    ORACLE分页存储过程

    之前一直用SQL SERVER做项目,但是现在需要用到ORACLE,在网上找了几个都无法正常调用,因此自己写了一个,给大家一起分享,在写的过程中学习到了很多东西,同时也体会到了SQL SERVER和ORACLE中的异同点 在分页存储...

    SQL Server 存储过程及Oracle SQL语句分页

    而Oracle的分页SQL语句更为简洁,适合在不支持存储过程或者简单场景下使用。但需要注意的是,Oracle的`ROWNUM`方式在处理有序数据时可能会有性能问题,因为`WHERE ROWNUM`条件可能无法充分利用索引。 在实际应用中...

    oracle查询分页条件通用存储过程

    oracle数据库的查询分页加条件和排序的通用型存储过程,通过将表名以参数的形式传入到存储过程中做到多表通用,也可以是多表关联的sql语句 将其看作一个表也能调用该存储过程,分页只需要传与页数,和每页显示的行数...

Global site tag (gtag.js) - Google Analytics