编程开发之--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;
*/
@Test
public 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(); //根据连接创建statment
call=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);
}
}
}
启动我们的单元测试,运行结果:

总结:存储过程可以实现存储函数所有的能力
编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)的更多相关文章
- 编程开发之--Oracle数据库--存储过程使用动态参数绑定(3)
1.动态参数绑定,可以实现动态的执行不同的sql --创建包 create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor; ...
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...
- 编程开发之--Oracle数据库--存储过程和存储函数(1)
1.存储过程和存储函数 描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数 区别:存储函数可以通过return子句返回一个函数的值 (1)存储过程 语法:create [or re ...
- oracle数据库存储过程中NO_DATA_FOUND不起作用解决
oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...
- oracle数据库存储过程中的select语句的位置
导读:在oracle数据库存储过程中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句. 先看下这个存储过 ...
- Oracle数据库date类型与Java中Date的联系与转化
以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前 ...
- 基于oracle数据库存储过程的创建及调用
1.PLSQL编程 1.1概念和目的 PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循 ...
- 在.NET开发面向Oracle数据库的应用程序
其实这个不是一个什么新的话题.但是之前在多次项目中,总是遇到大家针对Oracle数据库的访问时,会有各种各样的问题,最基本的就是要在客户端安装各种client,版本不一样的话还有各种问题. 静下心来看 ...
- 如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量
概述: 本地化是系统或软件运行的语言和文化环境.设置NLS_LANG环境参数是规定Oracle数据库软件本地化行为最简单的方式. NLS_LANG参数不但指定了客户端应用程序和Oracle数据库所使用 ...
随机推荐
- iview-admin2中vue.config配置文件輸出路徑
在vue.config.js文件中添加如下信息 module.exports = { baseUrl: '', // 可以配置生产和测试环境下,文件的路径(即index中引用的路径,但不会在dist中 ...
- 使用SVG中的Symbol元素制作Icon【摘转】
以下为内容摘抄和转摘记录: 为什么要用svg ? SVG优势 随着高清屏幕的普及,相比使用png等位图而言,使用SVG等矢量图形是一种全新的设计方式.更重要的是相比位图而言,SVG有着无可比拟的优势. ...
- Vue.js双向绑定原理
Vue.js最核心的功能有两个,一个是响应式的数据绑定系统,另一个是组件系统.本文仅仅探究双向绑定是怎样实现的.先讲涉及的知识点,再用简化的代码实现一个简单的hello world示例. 一.访问器属 ...
- java基础问题解答
Java学习中的问题 一 枚举类型: 下面是一段源程序代码: package Demo; public class Enum { public static void main(String[] ...
- vuejs plus d3
vuejs 是一个数据驱动视图的前端框架,一切皆可以作为可重用的组件加以使用. d3则是数据可视化javascript库,如何将二者的长处相结合是一个挑战. https://tyronetudehop ...
- SQL中的Datetime
在SQLserver中Datetime,只要格式是(yyyy-MM-dd HH:mm:ss)它都能认为是时间类型.
- java正则表达式校验移动电话、固话、邮编的校验
package com.tmall.epp.web.module.util; import java.util.regex.Pattern; /** * 移动电话.固话.邮编的校验 * @since ...
- 打通版微社区(5):部署DZ3.2
参考官方帖子http://www.discuz.net/thread-3258186-1-1.html 这是第三方的帖子http://www.discuz.net/thread-3199850-1- ...
- 用CALayer实现下载进度条控件
用CALayer实现下载进度条 效果: 源码: // // ViewController.m // ProgressView // // Created by YouXianMing on 14/11 ...
- 利用python查看电脑系统信息
#查看python默认编码格式 >>> import sys >>> print sys.getdefaultencoding() #python 2.x 默认编码 ...