在网上找了很久的 存储过程返回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;

oracle游标作为out参数,oracle 存储过程 带游标作为OUT参数输出相关推荐

  1. c mysql存储过程 out_MySQL存储过程带in和out参数

    实例一:无参的存储过程 复制代码 代码如下: $conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!" ...

  2. Oracle数据库笔记(基于oracle数据库的PLSQL编程以及存储过程的创建和使用)

    PLSQL编程 概念和目的 程序结构 Hello World 变量普通变量 引用型变量 记录型变量 流程控制 条件分支 循环 游标 什么是游标 语法 游标的属性 创建和使用 带参数的游标 存储过程 概 ...

  3. 存储过程,游标和触发器实例

    存储过程,游标和触发器实例 原文:存储过程,游标和触发器实例 自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录declare @User ...

  4. c oracle存储过程返回值,C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了C#调用存储过程的方法.分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @stu ...

  5. Oracle存储过程以及游标

    一.存储过程 1.存储过程定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中.在使用时候,用户通过指定已 ...

  6. 小青蛙oracle跟踪,Oracle 存储过程:游标

    一.认识游标 什么是游标?游标是数据库的一种数据类型,它用来管理从数据源(表,视图等)获取到的数据结果集,可以想象成一个游动的光标(指针),指向一个结果集,通过游标的移动逐行提取每一行的记录,就像我们 ...

  7. oracle 游标当方法参数,Oracle游标、参数的使用例子

    /// /// 总部审核 /// /// /// public int Update(Hashtable ht) { //修改 StringBuilder sb = new StringBuilder ...

  8. oracle学习总结2(pl/sql 游标 异常的处理 存储过程和函数 包 触发器)

    pl/sql的学习 给sql添加了逻辑判断与流程控制的功能 语法: declare begin exception end; 运算符 重要的就是赋值运算符了:=        连接  ||       ...

  9. oracle中创建游标,oracle 存储过程创建游标

    Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...

  10. Oracle --存储过程,输入不定个数参数

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,写存储过程时,输入的参数个数是固定的,但最近业务需求,输入的参数不固定. 思路:oracle存储过程的输入参数个数. ...

最新文章

  1. 六月份收集到比较有营养价值的AI方面的文章
  2. 算法之排列与组合算法
  3. 14.PTD与的基址
  4. go反射实战之数组的查找Find过滤Filter函数实现
  5. opencv32-基于距离变换和分水岭的图像分割
  6. 诗与远方:无题(十六)
  7. eclips断点调试
  8. 怎么做 空间杜宾模型_利用STATA创建空间权重矩阵及空间杜宾模型计算命令
  9. Linux编译安装iozone,Fedora下NFS的配置与iozone测试
  10. 南方cass简码识别大全_南方CASS简码成图的方法
  11. 离散分布——泊松分布、指数分布
  12. web 前端签名插件_手写签名插件—jSignature
  13. 上线长辈模式,饿了么能拿下银发市场吗?
  14. 【sdx62】XBL设置共享内存变量,然后内核层获取变量实现
  15. 计算机系英文简历常用的词汇,计算机专业英文简历词汇
  16. Quartus ii 与 Verilog入门教程(1)——Verilog实现8位计数器
  17. GitHub push的时候报:Unable to access ‘https://github.com/xxxx/xxxx.git/‘:OpenSSL SSL_read:Connection was
  18. 罗永浩:还可以承受无数次的失败;iOS14 或将推出系统级「小程序」功能;华为加入 OIN 社区 | EA周报...
  19. 计算机暑期学校心得,2017暑期学习心得体会6篇_2017暑期学习心得体会
  20. Qt中多线程的一种使用

热门文章

  1. dial tcp 10.96.0.1:443: i/o timeout
  2. geohash java 距离排序_APP筛选附近的人并排序(geohash算法)
  3. IE开发人员工具不见了?
  4. state 全局值 设置 和获取
  5. spring4.1.8扩展实战之七:控制bean(BeanPostProcessor接口)
  6. 统计细菌基因组ORF
  7. RocketMQ(十四)RocketMQ消息重试机制
  8. dubbo之SPI扩展机制注解:@Extension注解的作用
  9. Hibernate二级缓存以及ehcache的搭建配置
  10. 如何成为合格的企业邮箱管理员