`
teachertina
  • 浏览: 12511 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

oracle 复习体系四 PL/SQL(procedure,pagckage cursor)--分页处理

阅读更多

--语句块

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();

}

}

 

分享到:
评论

相关推荐

    Oracle数据库第5讲.pptx

    其次,PL/SQL支持模块化设计,如分页过程、订单处理和转账过程等,有利于代码组织和重用;再者,它能有效减少网络传输的数据量,因为多个操作可以在服务器端一次性处理;最后,由于PL/SQL代码可以直接在数据库中执行...

    Oracle数据库第5讲.ppt

    2. 模块化设计:PL/SQL使得复杂的业务逻辑可以被封装成独立的模块,如分页过程、订单处理过程和转账过程,便于管理和维护。 3. 减少网络传输:将多次SQL操作合并为一次调用,降低了网络通信的开销。 4. 安全性:通过...

    Oracle_plsql编程1

    Oracle PL/SQL编程是Oracle数据库系统中的一个核心组成部分,它扩展了标准SQL的功能,使得数据库开发者能够编写更高效、安全且模块化的代码。PL/SQL是Oracle为了解决纯SQL编程的一些局限性而设计的,这些局限性主要...

    PL/SQL中编写Oracle数据库分页的存储过程

    总的来说,Oracle数据库通过PL/SQL和存储过程结合refcursor类型,提供了灵活的分页查询能力。这种方式不仅适用于Java,也可以与其他支持JDBC的语言集成,如Python、C#等,从而在各种应用程序中实现高效的数据分页...

    java调用PLSQL分页过程.doc

    ### Java调用PL/SQL分页过程详解 #### 一、背景介绍 在现代软件开发中,Java 和数据库之间的交互非常频繁。对于大型系统来说,数据处理能力是至关重要的,尤其是在处理大量数据时,如何有效地分页显示这些数据是一...

    oracle包用存储过程图分页

    根据提供的信息,我们可以详细解析如何在Oracle数据库中创建一个包,并在该包内定义一个存储过程来实现分页功能。这种做法通常用于处理大量数据时,以提高查询效率和用户体验。 ### Oracle包与存储过程 #### 一、...

    利用PLSQL实现分页查询代码.rar

    本压缩包"利用PLSQL实现分页查询代码.rar"主要关注的是如何在Oracle环境中通过PL/SQL来执行分页查询,这对于处理大量数据时提升性能和用户体验至关重要。 分页查询是一种在大量数据中只显示一部分(例如,每页10条...

    oracle的 分页sql语句

    ### Oracle 分页 SQL 语句详解 #### 一、引言 在数据库操作中,分页查询是非常常见的需求之一,特别是在大数据量的情况下,通过分页技术可以有效地提高系统的响应速度和用户体验。Oracle 数据库提供了多种方式进行...

    oracle 存储过程分页示例

    Oracle存储过程是数据库管理系统中的一种重要编程元素,用于封装一系列SQL语句和PL/SQL代码,以实现特定的业务逻辑或功能。在大型数据库应用中,分页查询是常见的需求,尤其是在展示大量数据时,避免一次性加载所有...

    Oracle 存储过程分页

    Oracle 存储过程是数据库管理中的一个重要组成部分,它允许开发者编写复杂的SQL和PL/SQL代码,然后在数据库中以函数或程序的形式存储和调用。在处理大量数据时,分页查询是必不可少的,它可以有效地减少网络传输的...

    java Oracle存储过程分页整理

    在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 ...

    EJB3JPA调用原生SQL和函数存储过程[归类].pdf

    在Oracle数据库中,存储过程是预编译的PL/SQL代码块,可以封装复杂的业务逻辑。创建存储过程的基本语法如下: ```sql CREATE OR REPLACE PROCEDURE 存储过程名 IS BEGIN NULL; -- 代表什么也不做,不能删除 ...

    Oracle All 添加 修改 更新 Oracle分页 emp表 存储过程实现

    在Oracle中,存储过程是一种预编译的SQL和PL/SQL代码集合,它可以执行多种数据库操作,包括添加、修改和更新数据。在这个场景中,我们将深入探讨如何在Oracle中针对emp表实现分页查询的存储过程。 首先,让我们了解...

    oracle存储过程通用分页

    Oracle存储过程是数据库管理系统Oracle中实现复杂业务逻辑的重要工具,它可以封装一系列SQL语句和PL/SQL代码,形成可重复使用的程序单元。在处理大量数据时,为了提高性能和用户体验,通常会采用分页查询的方式来...

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

    Oracle存储过程是数据库编程的重要组成部分,它允许程序员封装一系列的SQL和PL/SQL语句,以便在需要时重复使用。在大数据量的数据库应用中,分页查询是必不可少的,因为它能够有效地处理和展示结果,避免一次性加载...

    oracle分页存储过程

    Oracle数据库在处理大量数据时,分页查询是一种非常实用的技术,可以有效提高用户界面的响应速度,减少网络传输的数据量。存储过程则是Oracle数据库中预编译的SQL语句集合,能够提高数据库操作的效率和安全性。下面...

    oracle分页查询

    Oracle数据库在处理大数据量时,分页查询是一种非常重要的优化策略,它可以帮助用户按需加载数据,避免一次性加载大量记录导致的性能问题。本主题将详细介绍Oracle中的分页查询,并结合Java和ASP.NET如何调用存储...

    利用存储过程分页,使用oracle数据库

    在Oracle数据库中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库操作,可提高性能,减少网络流量,并提供更安全的数据访问。分页是数据查询时常用的一种技术,尤其是在大型应用程序中,它允许用户按页...

    oracle存储过程学习经典[语法+实例+调用]

    #### 四、动态SQL与高效分页 1. **本地动态SQL**: - 使用PL/SQL的`EXECUTE IMMEDIATE`来构建动态SQL语句。 - 示例: ```sql DECLARE l_sql VARCHAR2(1000); BEGIN l_sql := 'SELECT * FROM table_name WHERE ...

Global site tag (gtag.js) - Google Analytics