编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
在本系列学习随笔中的第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)相关推荐
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...
- 用vc对oracle数据库编程,用VC开发基于ORACLE数据库应用程序
用VC开发基于ORACLE数据库应用程序 徐智文 [期刊名称]<包钢科技> [年(卷),期]2006(032)001 [摘要]VC++是一个强大的客户端开发工具,可以很方便地开发出基于PR ...
- 轻松学编程--轻松学Oracle数据库(附光盘)
查看书籍详细信息: 轻松学编程--轻松学Oracle数据库(附光盘) 编辑推荐 <轻松学Oracle数据库>本书中引用了大量的动手实践案例来讲解Oracle数据库中的各种知识,使读者能够更 ...
- 【AIO】使用ORACLE数据库存储过程发送企业微信群机器人消息
前言 为了对标阿里系的钉钉,腾讯于2016年4月18日推出了企业微信 专注企业内部通讯(目前已加入客户管理及客户通讯功能),替代原有的RTX腾讯通 企业微信由于微信的生态及其易用性,已被很多企业使用, ...
- oracle数据库存储过程中NO_DATA_FOUND不起作用解决
oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...
- python从oracle提取数据库_Python编程实战之Oracle数据库操作示例
本文实例讲述了Python编程实战之Oracle数据库操作.分享给大家供大家参考,具体如下: 1. 要想使Python可以操作Oracle数据库,首先需要安装cx_Oracle包,可以通过下面的地址来 ...
- Oracle数据库字符集为WE8ISO8859P1存储中文和Java读写展示
文章目录 前言 再次出现的现象 分析 失败尝试1 失败尝试2 失败尝试3 解决 结论 前言 之前<Oracle数据库字符集为WE8ISO8859P1存储中文和客户端程序展示中文问题>记录了 ...
- oracle应用程序开发,关于Oracle 数据库应用程序开发问题
首先安装oracle数据库的时候就会创建一个数据库的实例,这个库你完全就可以根据自己的需要想好他的名称,DBA,SysManager用户的密码,这个是你需要在安装的时候就要设定的,而且不要将其锁定,否 ...
- 在.NET开发面向Oracle数据库的应用程序
其实这个不是一个什么新的话题.但是之前在多次项目中,总是遇到大家针对Oracle数据库的访问时,会有各种各样的问题,最基本的就是要在客户端安装各种client,版本不一样的话还有各种问题. 静下心来看 ...
最新文章
- 使用Source Safe for SQL Server解决数据库版本管理问题
- Python学习之==数组(一)
- 斐波那契数列 递推 递归 备忘录 动态规划
- altiumer designer学习
- Ubuntu安装桌面环境
- Python的构造函数和析构函数,对象和类的不一样
- ASP.NET Web API简单学习
- php json 封装,laravel json返回封装
- Java 基础 匿名对象
- Gradle使用maven仓库
- Unity3D中背景音乐和相关音效的添加,背景音乐暂停、停止和播放的设置
- 控制/ 状态寄存器(RCC_CSR) 复位
- 计算机键盘和指法练习实验报告模板,实验报告总结怎么写
- 总结归纳erf与erfc
- c语言中tho什么意思,干货丨与老外聊天常用的英文缩写,速度get
- Echarts 柱状图调整 y 轴单位标题与图表之间的距离
- 什么是码元?什么是比特?
- 基于quartz实现定时任务管理系统
- 从零开始,如何拥有自己的博客网站【华为云至简致远】
- 一般的ATAC-seq数据分析流程图