首先我们来谈谈PL/SQL的好处
1.块结构: PL/SQL代码是由彼此之间可以互相嵌套的快组成的。每个块形成一个任务或逻辑模块单元。PL/SQL的块可以存储在数据库中,并且可以被重用。
2.过程语言能力:PL/SQL由过程语言的结构组成,像条件语句(if else语句)和循环语句(for loops)。
3.更好的性能:PL/SQL引擎可以同时处理多条SQL语句像一个单独的块,因此节约了网络传输。
4.错误处理:在PL/SQL程序执行期间,PL/SQL可以有效的处理异常或者错误。一旦异常被捕获,相应的动作可以被执行,依赖于异常的类型,或者显示个客户一个错误的消息。
下面是要实现分页用到的包和存储过程
--定义一个包,并在包中定义一个取得分页结果集的游标
create or replace package fypackage as
type fenye_cursor is ref cursor;
end fypackage;
--定义一个存储过程用来表示分页
create or replace procedure fenye(
tableName in varchar2,--查询的表名
myPageSize in number,--每页显示记录条数
pageNum in number,--第几页
allRows out number,--所有记录条数
allPages out number,--所有页数
result_cursor out fypackage.fenye_cursor--返回结果集游标
) is
v_sql varchar2(1000);
v_start number:=(pageNum-1)*myPageSize+1;
v_end number:=pageNum*myPageSize;
begin
v_sql:='select * from (select A.*,rownum rn from (select * from '||tableName||') A) where rn>='||v_start||' and rn<='||v_end;
open result_cursor for v_sql;
v_sql:='select count(*) from '||tableName;
execute immediate v_sql into allRows;
if mod(allRows,myPageSize)=0 then
allPages:=allRows/myPageSize;
else
allPages:=allRows/myPageSize+1;
end if;
end;
在客户端调用存储过程
package com.lamp.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestProcedureFenye {
public static void main(String[] args) {
Connection conn = null;
CallableStatement cs = null;
String user = "SCOTT";
String password = "tiger";
String url = "jdbc:oracle:thin:@localhost:1521:数据库名";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
cs = conn.prepareCall("{call fenye(?,?,?,?,?,?)}");
cs.setString(1, "emp");
cs.setInt(2, 5);
cs.setInt(3, 2);
// 设置返回值类型
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
int allRows = cs.getInt(4);
int allPages = cs.getInt(5);
ResultSet rs = (ResultSet) cs.getObject(6);
System.out.println(allRows + " " + allPages);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (cs != null) {
try {
cs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
分享到:
相关推荐
总结来说,Oracle存储过程实现分页查询的关键在于动态构造SQL语句,结合ROWNUM或ROW_NUMBER()来实现分页。理解这一机制有助于我们在处理大量数据时编写高效、可复用的代码。在实际应用中,根据具体需求和数据库设计...
#### 一、Oracle存储过程分页原理及实现方法 在Oracle数据库中,实现分页查询通常有两种方法:一种是使用`ROWNUM`伪列,另一种则是通过存储过程实现。其中,使用存储过程进行分页更加灵活且易于维护。 #### 二、...
本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...
ibatis调用oracle存储过程分页
接着,Oracle存储过程是预编译的SQL语句和PL/SQL代码集合,可以封装在数据库中并被多次调用。在本项目中,存储过程可能包含用于分页查询的逻辑,例如,根据用户指定的页数和每页记录数来动态构建SQL查询语句。 实现...
### Oracle存储过程实现分页功能 #### 背景与目的 在数据库操作中,分页查询是非常常见的需求之一,特别是在大数据量的情况下,通过分页能够有效地提高数据处理的效率和用户体验。本文将详细介绍如何利用Oracle...
Oracle 提供了多种方法实现分页查询,下面我们将详细探讨Oracle存储过程中的分页实现。 1. **ROWNUM伪列** 在早期的Oracle版本中,ROWNUM伪列被广泛用于分页。ROWNUM是在结果集生成时自动分配的,表示每一行的顺序...
本篇文章将深入探讨如何在Oracle中通过调用存储过程实现分页功能。 首先,我们需要创建一个存储过程,这个过程将接收两个参数:起始记录编号(一般为当前页数乘以每页显示的记录数)和每页的记录数。存储过程内部会...
### Oracle存储过程实现分页查询知识点详解 #### 一、背景与目的 在数据库操作中,分页查询是非常常见的需求之一。特别是在数据量较大的场景下,分页不仅可以提高查询效率,还能改善用户体验。Oracle数据库提供了...
#### Oracle存储过程实现分页: 在Oracle数据库中,可以通过存储过程结合ROWNUM来实现分页查询。具体而言,可以创建一个包含动态SQL的存储过程,这个过程根据传入的参数动态生成SQL语句,从而实现灵活的分页查询。 ...
这篇博客“Oracle存储过程通用分页”将深入探讨如何利用Oracle存储过程来实现高效、灵活的分页功能。 首先,理解分页的基本概念至关重要。分页是将大型数据集分成若干小块,每次只加载一部分数据到内存中,这样可以...
oracle分页存储过程,oracle分页存储过程
本文将深入探讨Oracle数据库中的高效分页存储过程及其修改版。 首先,我们要理解什么是分页查询。分页查询是数据库中的一种查询策略,它将结果集分为多个部分,每次只返回一部分(一页)结果给用户。这通常涉及到两...
Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种高效且灵活的方式。本文将详细介绍如何在 Oracle 中创建一个用于分页查询并返回总记录数的存储过程。 #### 核心概念 1. **存储过程**:存储在...
通过上述分析和示例,我们可以看到,利用Oracle存储过程进行分页查询不仅可以提高查询效率,还能增强代码的可读性和可维护性。在实际项目中,结合C#等高级语言的应用,可以进一步提升系统的性能和用户体验。
而Oracle的分页SQL语句更为简洁,适合在不支持存储过程或者简单场景下使用。但需要注意的是,Oracle的`ROWNUM`方式在处理有序数据时可能会有性能问题,因为`WHERE ROWNUM`条件可能无法充分利用索引。 在实际应用中...
Oracle存储过程是数据库管理系统中的一种重要编程元素,用于封装一系列SQL语句和PL/SQL代码,以实现特定的业务逻辑或功能。在大型数据库应用中,分页查询是常见的需求,尤其是在展示大量数据时,避免一次性加载所有...
接下来,我们关注`.cs`代码部分,这部分通常涉及到C#后端如何调用Oracle存储过程并处理返回的数据。你可以使用Oracle Managed Data Access (ODP.NET)库来实现。以下是一个简单的示例: ```csharp using Oracle....
总的来说,这个Oracle存储过程的实现方式有效地解决了在Oracle数据库中进行分页查询的问题,通过动态构建SQL语句和使用游标,使得在应用程序中可以灵活地处理和展示大量数据。这种方式不仅提高了代码的可维护性,还...