oracle游标作为out参数,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;
oracle游标作为out参数,oracle 存储过程 带游标作为OUT参数输出相关推荐
- c mysql存储过程 out_MySQL存储过程带in和out参数
实例一:无参的存储过程 复制代码 代码如下: $conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!" ...
- Oracle数据库笔记(基于oracle数据库的PLSQL编程以及存储过程的创建和使用)
PLSQL编程 概念和目的 程序结构 Hello World 变量普通变量 引用型变量 记录型变量 流程控制 条件分支 循环 游标 什么是游标 语法 游标的属性 创建和使用 带参数的游标 存储过程 概 ...
- 存储过程,游标和触发器实例
存储过程,游标和触发器实例 原文:存储过程,游标和触发器实例 自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录declare @User ...
- c oracle存储过程返回值,C#调用存储过程详解(带返回值、参数输入输出等)
本文实例讲述了C#调用存储过程的方法.分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @stu ...
- Oracle存储过程以及游标
一.存储过程 1.存储过程定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中.在使用时候,用户通过指定已 ...
- 小青蛙oracle跟踪,Oracle 存储过程:游标
一.认识游标 什么是游标?游标是数据库的一种数据类型,它用来管理从数据源(表,视图等)获取到的数据结果集,可以想象成一个游动的光标(指针),指向一个结果集,通过游标的移动逐行提取每一行的记录,就像我们 ...
- oracle 游标当方法参数,Oracle游标、参数的使用例子
/// /// 总部审核 /// /// /// public int Update(Hashtable ht) { //修改 StringBuilder sb = new StringBuilder ...
- oracle学习总结2(pl/sql 游标 异常的处理 存储过程和函数 包 触发器)
pl/sql的学习 给sql添加了逻辑判断与流程控制的功能 语法: declare begin exception end; 运算符 重要的就是赋值运算符了:= 连接 || ...
- oracle中创建游标,oracle 存储过程创建游标
Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...
- Oracle --存储过程,输入不定个数参数
2019独角兽企业重金招聘Python工程师标准>>> 一般来说,写存储过程时,输入的参数个数是固定的,但最近业务需求,输入的参数不固定. 思路:oracle存储过程的输入参数个数. ...
最新文章
- Struts2配置struts.xml文件
- [Python语音识别项目笔记] 3softmax函数
- java 矩阵转置_图解利用Java实现数组转置
- php调试工具——XDebug使用
- python excel 填充颜色_“利用python将图填充到excel案例”
- 搜狗站群排名优化之搜狗批量推送工具
- Fixed Gear DIY整车配色 JavaScript版制作过程
- python中matplotlib画图导入到word中如何保证分辨率
- 用python画爱心动图_python 动态绘制爱心的示例
- 解密-大象跳转如何实现微信中点击链接直接跳到默认浏览器(不是在微信内置浏览器打开)
- 消费者理论:效用函数
- pyecharts饼图pie制作
- 已嵌入微信公众号内的小图聊天机器人介绍和使用说明
- android 微信朋友圈头像,微信进阶玩法,这样设置朋友圈和头像,个性又好看
- 支付宝wap支付开通流程
- 离谱,还有这种自暴自弃的翻译?
- itext使用缺陷?
- 百度搜索过滤指定网站
- mapbox pbf vt2geojson 解析pbf图层为geojson格式
- 性能测试/压力测试/负载测试
热门文章
- PHP 日期时间类 Carbon 的常见用法
- Linux用户环境变量及操作
- ElasticSearch5.0——IK词库加载
- ES6 Set结构和Map结构(上)
- Android Studio 创建/打开项目时一直处于Building“project name”Gradle project info 的解决...
- 需求文档2_The Battle of Polytopia
- CentOS6.2(64bit)下mysql5.6.16主从同步配置
- SSD5_ Exam 2分析
- -个很个性的二本人计时
- oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决......