在本系列学习随笔中的第2节我们留下了2个问题,我们现在讨论在out参数中使用光标。

1、要在out参数中使用光标,我们需要申明一个包的结构,包的结构分为包头和包体,包头只负责申明,包体只负责实现。包头、包体也是数据库中的对象,与表是同一级别类型。

应用场景举例:查询某部门所有员工的所有信息

包头:根据以下步骤创建

命名包名:mypackage:

在包中编写我们自己的存储过程或者存储函数:

按下键盘ctrl+s,sql developer将自动存盘并且进行编译:

接下来我们创建包的主体:

将会自动为我们创建要实现的包体部分:

然后我们将包体实现完整:

同样,按下ctrl+s后,将自动帮我们存盘和编译生成相应的包体结构树:

使用desc语句查看包的结构:

2、在应用中访问包中的存储过程,需要带上包的名字

在测试包中添加我们的测试类TestCursor.java

package demo.oracle;import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;import org.junit.Test;import demo.utils.JDBCUtils;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;public class TestCursor {/*** create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor;procedure queryEmpList(dno in number,empList out empcursor);END MYPACKAGE;*/@Testpublic void testCursor(){//{call <procedure-name>[(<agr1>,<agr2>,...)]}String sql="{call MYPACKAGE.queryEmpList(?,?)}";Connection conn=null;CallableStatement call=null;ResultSet rs=null;try {//获得数据库连接conn=JDBCUtils.getConnection();//根据连接创建statmentcall=conn.prepareCall(sql);//对in参数赋值call.setInt(1, 10);//对out参数进行申明call.registerOutParameter(2, OracleTypes.CURSOR);//执行我们的调用call.execute();//取出该部门中所有员工的信息,由于我们当前是Oracle的光标,Oracle的存储过程,所以我们要对call进行转换rs=((OracleCallableStatement)call).getCursor(2);while(rs.next()){//取出该员工的员工号、姓名、薪水、职位字段作为示例int empno = rs.getInt("empno");String name = rs.getString("ename");double salary = rs.getDouble("sal");String job = rs.getString("job");System.out.println(empno+"\t"+name+"\t"+salary+"\t"+job);}} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.release(conn, call, rs);}}
}

  启动我们的单元测试,运行结果:

总结:存储过程可以实现存储函数所有的能力

转载于:https://www.cnblogs.com/ZeroMZ/p/9196927.html

编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)相关推荐

  1. 编程开发之--Oracle数据库--存储过程和存储函数(2)

    上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...

  2. 用vc对oracle数据库编程,用VC开发基于ORACLE数据库应用程序

    用VC开发基于ORACLE数据库应用程序 徐智文 [期刊名称]<包钢科技> [年(卷),期]2006(032)001 [摘要]VC++是一个强大的客户端开发工具,可以很方便地开发出基于PR ...

  3. 轻松学编程--轻松学Oracle数据库(附光盘)

    查看书籍详细信息: 轻松学编程--轻松学Oracle数据库(附光盘) 编辑推荐 <轻松学Oracle数据库>本书中引用了大量的动手实践案例来讲解Oracle数据库中的各种知识,使读者能够更 ...

  4. 【AIO】使用ORACLE数据库存储过程发送企业微信群机器人消息

    前言 为了对标阿里系的钉钉,腾讯于2016年4月18日推出了企业微信 专注企业内部通讯(目前已加入客户管理及客户通讯功能),替代原有的RTX腾讯通 企业微信由于微信的生态及其易用性,已被很多企业使用, ...

  5. oracle数据库存储过程中NO_DATA_FOUND不起作用解决

    oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...

  6. python从oracle提取数据库_Python编程实战之Oracle数据库操作示例

    本文实例讲述了Python编程实战之Oracle数据库操作.分享给大家供大家参考,具体如下: 1. 要想使Python可以操作Oracle数据库,首先需要安装cx_Oracle包,可以通过下面的地址来 ...

  7. Oracle数据库字符集为WE8ISO8859P1存储中文和Java读写展示

    文章目录 前言 再次出现的现象 分析 失败尝试1 失败尝试2 失败尝试3 解决 结论 前言 之前<Oracle数据库字符集为WE8ISO8859P1存储中文和客户端程序展示中文问题>记录了 ...

  8. oracle应用程序开发,关于Oracle 数据库应用程序开发问题

    首先安装oracle数据库的时候就会创建一个数据库的实例,这个库你完全就可以根据自己的需要想好他的名称,DBA,SysManager用户的密码,这个是你需要在安装的时候就要设定的,而且不要将其锁定,否 ...

  9. 在.NET开发面向Oracle数据库的应用程序

    其实这个不是一个什么新的话题.但是之前在多次项目中,总是遇到大家针对Oracle数据库的访问时,会有各种各样的问题,最基本的就是要在客户端安装各种client,版本不一样的话还有各种问题. 静下心来看 ...

最新文章

  1. 使用Source Safe for SQL Server解决数据库版本管理问题
  2. Python学习之==数组(一)
  3. 斐波那契数列 递推 递归 备忘录 动态规划
  4. altiumer designer学习
  5. Ubuntu安装桌面环境
  6. Python的构造函数和析构函数,对象和类的不一样
  7. ASP.NET Web API简单学习
  8. php json 封装,laravel json返回封装
  9. Java 基础 匿名对象
  10. Gradle使用maven仓库
  11. Unity3D中背景音乐和相关音效的添加,背景音乐暂停、停止和播放的设置
  12. 控制/ 状态寄存器(RCC_CSR) 复位
  13. 计算机键盘和指法练习实验报告模板,实验报告总结怎么写
  14. 总结归纳erf与erfc
  15. c语言中tho什么意思,干货丨与老外聊天常用的英文缩写,速度get
  16. Echarts 柱状图调整 y 轴单位标题与图表之间的距离
  17. 什么是码元?什么是比特?
  18. 基于quartz实现定时任务管理系统
  19. 从零开始,如何拥有自己的博客网站【华为云至简致远】
  20. 一般的ATAC-seq数据分析流程图

热门文章

  1. Mac下显示隐藏文件
  2. [转] c#中 多线程访问winform控件
  3. 1 第一次画PCB总结
  4. [Swust OJ 247]--皇帝的新衣(组合数+Lucas定理)
  5. Spring Cron Expression
  6. IIS日志作用与分析
  7. 批处理判断文件夹是否存在
  8. 如何在网页中动态为模版页的Body添加属性
  9. 看起来很美 VS. 是你来检阅我的忧伤了吗?
  10. 解析XML时DTD的处理--解析时忽略,生成XML文件时加上。-- XML进阶