`

oracle 存储过程 带游标作为OUT参数输出

阅读更多
在网上找了很久的 存储过程返回OUT参数的游标 例子,都不理想,最后还是自己写个。以备后用。

包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 procedure AAA(变量名 out [cur_name])如此申明OUT变量
存储过程 用系统默认的 sys_refcursor 游标类型 定义变量就OK了
			--PL/SQL Code (包中带过程) 过程带游标的OUT参数,返回游标(ref cursor)
			
			create or replace package my_pack as
			 type my_ref_cursor is ref cursor;
			 procedure getMyCursor(val out my_ref_cursor); 
			end my_pack;
			
			create or replace package body my_pack as
			 procedure getMyCursor(val out my_ref_cursor)
			 is
			 begin
			  open val for select * from student;
			 end;
			end my_pack;
	

		 
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = DriverManager.getConnection                       ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp"); 
			DriverManager.registerDriver (new oracle.jdbc.OracleDriver());   
			CallableStatement cs = conn.prepareCall("{ call my_pack.getMyCursor(?) }");
			cs.registerOutParameter(1,OracleTypes.CURSOR);
			cs.execute();
			ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);
			while(rs.next())
			{
				System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getString(3)+"  "+ rs.getDate(4)+"  "+rs.getString(5));
			}



		
			--PL/SQL Code(存储过程) 带游标的OUT参数,返回游标(ref cursor)
			 
			create or replace procedure retCursor(ret_cursor out sys_refcursor)is
			ret_cursor_value  sys_refcursor;
			begin
			open ret_cursor_value for select * from student;
			 ret_cursor:=ret_cursor_value;
			end retCursor;


			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = Connection conn = DriverManager.getConnection                       ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp"); 

			DriverManager.registerDriver (new oracle.jdbc.OracleDriver());   
			CallableStatement cs = conn.prepareCall("{ call retCursor(?) }");
			cs.registerOutParameter(1,OracleTypes.CURSOR);
			cs.execute();
			ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);
			while(rs.next())
			{
				System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getString(3)+"  "+ rs.getDate(4)+"  "+rs.getString(5));
			}


下面是个每个学生求平均值的存储过程。遇到的问题是带参数游标中的变量名字不要和表中的一样,否则会出问题

create or replace procedure AAA
as 
--查询学生表的ID
cursor s_sno is select s.sno from student s; 
--通过学生ID查询平均成绩
cursor sc_avg(s_no varchar2) is select avg(sc.degree) from score sc where sc.sno=s_no; 
s_sno_j student.sno%type;   --变量ID
sc_avg_i score.degree%type; --变量平局成绩
begin
 open s_sno;--打开查询ID的游标
 loop
   fetch s_sno into s_sno_j;
   exit when s_sno%notfound;  
     open sc_avg(s_sno_j); --打开查询平均成绩的游标,参数为学生ID
     loop
     fetch sc_avg into sc_avg_i;
     exit when sc_avg%notfound;
     dbms_output.put_line(sc_avg_i);
     end loop;
     close sc_avg;
 end loop;
 close s_sno;
end AAA;
分享到:
评论
1 楼 20055294 2010-06-11  
最近我正在学习存储过程,谢了

相关推荐

    Oracle存储过程out游标

    Out游标允许存储过程将查询的结果集作为输出参数返回。在PL/SQL中,声明一个Out类型的游标变量,然后在存储过程中打开这个游标执行查询,最后在调用者中通过这个游标变量获取数据。例如: ```sql CREATE OR REPLACE...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    本示例展示了如何使用 CallabledStatement 来调用 Oracle 存储过程,并实现 IN OUT 参数和游标类型参数的使用。这种方法可以提高应用程序的性能和安全性。同时,游标类型参数的使用可以实现数据的批量处理,提高应用...

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    java调用oracle存储过程(游标)相关

    总之,Java调用Oracle存储过程,尤其是处理游标,需要理解JDBC的使用、Oracle特定的类型以及存储过程的参数传递方式。通过合理的编程实践,我们可以高效地在Java应用程序中集成Oracle数据库的复杂操作。

    JAVA调用ORACLE存储过程游标使用

    1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes.CURSOR`类型。 3. 执行存储过程并获取返回的游标对象。 4. 将游标...

    C#调用带游标的oralce存储过程

    本示例主要讲解如何在C# Winform应用中调用带游标的Oracle存储过程,以及处理返回的输出参数。 首先,确保你的开发环境已经安装了Oracle的数据提供程序,如ODP.NET。这将允许C#与Oracle数据库进行交互。在NuGet包...

    Oracle 存储过程JAVA调用存储过程 游标使用

    这篇博客可能详细讨论了如何在Java中与Oracle存储过程交互,特别是涉及到了游标的使用。 首先,让我们理解存储过程的概念。存储过程是一组预先编译的SQL语句,可以接受参数,执行复杂操作,然后返回结果。在Oracle...

    oracle存储过程常用技巧

    2. OUT 参数:作为输出参数,需要注意,当一个参数被指定为 OUT 类型时,就算在调用存储过程之前对该参数进行了赋值,在存储过程中可以重新赋值。 3. IN OUT 参数:既可以作为输入参数,也可以作为输出参数。 三、...

    oracle 存储过程 案例

    这个“Oracle存储过程案例”提供了丰富的学习材料,帮助用户从入门到精通掌握存储过程和游标的使用。下面我们将深入探讨这两个核心概念。 一、Oracle存储过程 存储过程是预编译的SQL语句集合,可以包含数据查询、...

    Oracle存储过程返回游标实例详解

    Oracle存储过程返回游标是数据库开发中常见的操作,主要用于处理多行数据集合。在Oracle中,游标可以作为存储过程的输出参数,使得调用者能够遍历并处理存储过程执行后的结果集。这里我们将详细讲解两种实现方法:...

    用java调用oracle存储过程总结

    se();}if(stmt != null){stmt.close();}if(conn != null){conn.close();...此外,对于存储过程的错误处理,通常需要在Oracle存储过程中添加异常捕获和处理机制,以便在Java调用时能够得到清晰的错误信息。

    ORACLE存储过程最全教程

    Oracle存储过程是数据库管理系统Oracle中的一个关键特性,它允许开发者编写一组预编译的SQL和PL/SQL语句,以实现特定的业务逻辑或数据库操作。这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面...

    oracle存储过程语法

    存储过程可以带有参数,参数可以是输入参数(IN)或输出参数(OUT)。参数的类型可以是Oracle中的任何合法类型。 变量的声明 在存储过程中,可以声明变量,以便存储过程的执行。变量的声明格式为: 变量名 类型...

    oracle存储过程学习经典(实例)

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重用的代码块。这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何...

    Java获取Oracle存储过程返回的Cursor

    本篇文章将详细介绍如何在Java中通过ODBC6驱动获取Oracle存储过程返回的Cursor。 首先,我们需要创建一个Oracle存储过程,该过程定义了一个名为CURSOR_RESULT的REF CURSOR类型。在提供的示例中,我们有一个名为TEST...

    oracle存储过程编写

    3. 输入/输出参数(IN OUT):既可以作为输入,也可以作为输出。 四、PL/SQL块结构 1. DECLARE:声明部分,定义变量、游标、异常等。 2. BEGIN:执行部分,包含PL/SQL语句和逻辑控制结构。 3. EXCEPTION:异常处理...

    oracle存储过程教程

    在提供的“oracle存储过程教程@www.java1234.com.pdf”文件中,你可能会深入学习到这些概念和实践技巧,包括但不限于存储过程的创建、调用、参数类型、游标、异常处理、事务管理以及与Java的集成。通过阅读和实践,...

    oracle存储过程语法.pdf

    1. 存储过程参数不带取值范围,in 表示传入,out 表示输出类型可以使用任意 Oracle 中的合法类型。 2. 变量带取值范围,后面接分号。 3. 在判断语句前最好先用 count(*) 函数判断是否存在该条操作记录。 4. 用 ...

    oracle存储过程学习资料

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列复杂的SQL和PL/SQL语句,形成可重用的代码块。这些代码块可以执行数据处理、事务控制、错误处理等多种任务,极大地提高了数据库应用...

Global site tag (gtag.js) - Google Analytics