--语句块
conn scott/tiger;
declare
v_ename varchar2(10);
begin
select ename into v_ename from emp;
end;
--create procedure single result
creaate or replace procedure pro_getName(v_empno in number,v_ename out varchar2) is
begin
select ename into v_ename from emp where empno=v_empno;
end;
--java code
//loading driver
Class.forName("oracle.jdbc.driver.OracleDriver");
//getConnection
Connection conn = DriverManager.getConnection("jdbc:oracle:thin@localhost:1521:orcl","scott","tiger");
//getStatement
CallableStatement cs = conn.prepareCall("{pro_getName(?,?)}");
//setParameter
cs.setInt(1,111);
//registerOutParameter
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);
//execute();
cs.execute();
//getValue
String ename= cs.getString(2);
//close resource
cs.close();
conn.close();
--create procedure (resultSet) before create package ,cursor
--create package
create or replace package myPackage as
type p_myemp is ref cursor;
end myPackage;
--procedure
create or replace procedure pro_resultSet(v_cursor out myPackage.p_myemp) is
begin
open v_cursor is select * from emp;
end;
--java code
//loading driver
Class.forName("oracle.jdbc.driver.OracleDriver");
//getConnection
Connection conn = DriverManager.getConnection("jdbc:oracle:thin@localhost:1521:orcl","scott","tiger");
//getStatement
CallableStatement cs = conn.prepareCall("{pro_getName(?)}");
//registerOutParameter
cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); //type is cursor
//execute();
cs.execute();
//getValue
ResultSet rs = cs.getObject(1);
//print value
while(rs.next()){
System.out.println(rs.get(0));
}
//close resource
rs.close();
cs.close();
conn.close();
--cursor
declare
cursor cs_emp is select empno,ename from emp;
v_no number(4);
v_name varchar2(20);
begin
open cs_emp;
fetch cs_emp into v_no,v_name;
loop
dbms_output.put_line(v_no || v_name);
exit when cs_emp%notfound;
end loop;
end;
declare
cursor cs_emp is select * from emp;
v_type cs_emp%rowtype;
begin
fetch cs_emp into v_type;
dbms_output.put_line(v_type.empno|| v_type.ename|| '......');
end;
declare
cursor cs_emp is select * from emp;
begin
for cs_emp into v_type loop
dbms_output.put_line(v_type.empno|| v_type.ename|| '......');
end loop;
end;
--输入表名:tableName,每页显示的记录数:num,当前页数:currentPage,排序字段:filed,顺序:sequence
--返回总记录数:sums,总页数:pageCount,结果集:rs;
create or replace package tPackage as
type p_page is ref cursor;
end tPackage;
create or replace pro_page(tableName in varchar2, num in number, currentPage in number, filed in varchar2, seq in varchar2 , v_page out tPackage.p_page,total out number,pageCount out number) is
v_minSize number;
v_maxSize number:=currentPage*num;
v_str varchar2(100);
begin
v_minSize:=(currentPage-1)*num+1;
v_str:='select * from (select r.*,rownum rn from (select * from '||tableName||' order by '||filed||' '||seq||') r where rownum<='||maxSize||') where rn>='|| minSize;
open v_page for v_str;
--计算总记录数和总页数
v_str :='select count(*) from '|| tableName;
execute immediate v_str into total;
--pageCount
if mod(total,num)=0 then
pageCount = total/num;
else
pageCount = total/num+1;
end if;
close v_page;
end;
--java 调用
public static void main(String[] args) {
int currentPage = 1;
int pageSize = 12;
try {
//load driver
Class.forName("oracle.jdbc.driver.OracleDriver");
//get connection
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
//get CallableStatement
CallableStatement cs = connection.prepareCall("{call pro_page(?,?,?,?,?,?,?,?)}");
//set parammeter
cs.setString(1, "emp");
cs.setInt(2,pageSize);
cs.setInt(3,currentPage);
cs.setString(4,"sal");
cs.setString(5,"");
//registerOutParameter
cs.registerOutParameter(6,oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(7,oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(8,oracle.jdbc.OracleTypes.CURSOR);
//执行
cs.execute();
//总记录数
int rows = cs.getInt(6);
//总页数
int pageCount = cs.getInt(7);
//结果集
ResultSet rs = (ResultSet) cs.getObject(8);
System.out.println("总记录数为:"+rows+"--总页数为:"+pageCount+"----当前是第"+currentPage+"页每页显示"+pageSize+"条");
while(rs.next()){
System.out.println("--------------------------------");
System.out.print("编号:"+rs.getInt(1));
System.out.print("姓名:"+rs.getString(2));
System.out.print("薪水:"+rs.getDouble(6));
System.out.println("--------------------------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}
分享到:
相关推荐
其次,PL/SQL支持模块化设计,如分页过程、订单处理和转账过程等,有利于代码组织和重用;再者,它能有效减少网络传输的数据量,因为多个操作可以在服务器端一次性处理;最后,由于PL/SQL代码可以直接在数据库中执行...
2. 模块化设计:PL/SQL使得复杂的业务逻辑可以被封装成独立的模块,如分页过程、订单处理过程和转账过程,便于管理和维护。 3. 减少网络传输:将多次SQL操作合并为一次调用,降低了网络通信的开销。 4. 安全性:通过...
Oracle PL/SQL编程是Oracle数据库系统中的一个核心组成部分,它扩展了标准SQL的功能,使得数据库开发者能够编写更高效、安全且模块化的代码。PL/SQL是Oracle为了解决纯SQL编程的一些局限性而设计的,这些局限性主要...
总的来说,Oracle数据库通过PL/SQL和存储过程结合refcursor类型,提供了灵活的分页查询能力。这种方式不仅适用于Java,也可以与其他支持JDBC的语言集成,如Python、C#等,从而在各种应用程序中实现高效的数据分页...
### Java调用PL/SQL分页过程详解 #### 一、背景介绍 在现代软件开发中,Java 和数据库之间的交互非常频繁。对于大型系统来说,数据处理能力是至关重要的,尤其是在处理大量数据时,如何有效地分页显示这些数据是一...
根据提供的信息,我们可以详细解析如何在Oracle数据库中创建一个包,并在该包内定义一个存储过程来实现分页功能。这种做法通常用于处理大量数据时,以提高查询效率和用户体验。 ### Oracle包与存储过程 #### 一、...
本压缩包"利用PLSQL实现分页查询代码.rar"主要关注的是如何在Oracle环境中通过PL/SQL来执行分页查询,这对于处理大量数据时提升性能和用户体验至关重要。 分页查询是一种在大量数据中只显示一部分(例如,每页10条...
### Oracle 分页 SQL 语句详解 #### 一、引言 在数据库操作中,分页查询是非常常见的需求之一,特别是在大数据量的情况下,通过分页技术可以有效地提高系统的响应速度和用户体验。Oracle 数据库提供了多种方式进行...
Oracle存储过程是数据库管理系统中的一种重要编程元素,用于封装一系列SQL语句和PL/SQL代码,以实现特定的业务逻辑或功能。在大型数据库应用中,分页查询是常见的需求,尤其是在展示大量数据时,避免一次性加载所有...
Oracle 存储过程是数据库管理中的一个重要组成部分,它允许开发者编写复杂的SQL和PL/SQL代码,然后在数据库中以函数或程序的形式存储和调用。在处理大量数据时,分页查询是必不可少的,它可以有效地减少网络传输的...
在Oracle的存储过程中,我们可以使用PL/SQL来编写分页查询的逻辑。例如: ```sql CREATE OR REPLACE PROCEDURE PROC_NAME ( p_page_size IN NUMBER, p_start_row OUT NUMBER, p_result OUT SYS_REFCURSOR ) AS ...
在Oracle数据库中,存储过程是预编译的PL/SQL代码块,可以封装复杂的业务逻辑。创建存储过程的基本语法如下: ```sql CREATE OR REPLACE PROCEDURE 存储过程名 IS BEGIN NULL; -- 代表什么也不做,不能删除 ...
在Oracle中,存储过程是一种预编译的SQL和PL/SQL代码集合,它可以执行多种数据库操作,包括添加、修改和更新数据。在这个场景中,我们将深入探讨如何在Oracle中针对emp表实现分页查询的存储过程。 首先,让我们了解...
Oracle存储过程是数据库管理系统Oracle中实现复杂业务逻辑的重要工具,它可以封装一系列SQL语句和PL/SQL代码,形成可重复使用的程序单元。在处理大量数据时,为了提高性能和用户体验,通常会采用分页查询的方式来...
Oracle存储过程是数据库编程的重要组成部分,它允许程序员封装一系列的SQL和PL/SQL语句,以便在需要时重复使用。在大数据量的数据库应用中,分页查询是必不可少的,因为它能够有效地处理和展示结果,避免一次性加载...
Oracle数据库在处理大量数据时,分页查询是一种非常实用的技术,可以有效提高用户界面的响应速度,减少网络传输的数据量。存储过程则是Oracle数据库中预编译的SQL语句集合,能够提高数据库操作的效率和安全性。下面...
Oracle数据库在处理大数据量时,分页查询是一种非常重要的优化策略,它可以帮助用户按需加载数据,避免一次性加载大量记录导致的性能问题。本主题将详细介绍Oracle中的分页查询,并结合Java和ASP.NET如何调用存储...
在Oracle数据库中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库操作,可提高性能,减少网络流量,并提供更安全的数据访问。分页是数据查询时常用的一种技术,尤其是在大型应用程序中,它允许用户按页...
#### 四、动态SQL与高效分页 1. **本地动态SQL**: - 使用PL/SQL的`EXECUTE IMMEDIATE`来构建动态SQL语句。 - 示例: ```sql DECLARE l_sql VARCHAR2(1000); BEGIN l_sql := 'SELECT * FROM table_name WHERE ...