一、需求

传入一个参数,返回一条或多条记录(列表)。

二、实现步骤

1. 编写Oracle存储过程。

-- 声明包和包体的语句应该分两次执行,即使声明在前定义在后,如果一起执行依然会编译出错

--调用能够返回多条记录的存储过程需要定义在包内

--声明包及包内的游标、存储过程

CREATE OR REPLACE PACKAGE pack_myPackage ISTYPE myCursorIS REF CURSOR;PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, myCursor OUT myCursor);ENDpack_myPackage;--定义包体

CREATE OR REPLACE PACKAGE BODY pack_myPackage IS

PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, outcursor OUT myCursor) IS

BEGIN

OPEN outcursor FORSELECT * FROM tableA WHERE P_NO =pNo;ENDproc_querySomeInfo;END pack_myPackage;

2. 编写Java代码

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;/*** 存储过程测试

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call pack_myPackage.proc_getSomeInfo(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

cstmt.execute();

rs= (ResultSet) cstmt.getObject(2);if (rs != null) {while(rs.next()) {

System.out.println(rs.getString(1));

}

}

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

三、 其他需求

1. Java调用有返回值的Oracle存储过程(返回一个简单类型的值)

(1)定义存储过程:

CREATE OR REPLACE PROCEDURE proc_A(param1 IN VARCHAR2, param2 OUT VARCHAR2)AS

BEGIN

SELECT name INTO param2 FROM T_A WHERE id =param1;END;

(2)编写Java代码:

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;

/*** 存储过程测试

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call proc_A(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

cstmt.execute();

System.out.println("Output is:" + cstmt.getString(2));}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

2. Java调用无返回值的Oracle存储过程(无返回值)

(1)定义存储过程:

CREATE OR REPLACE PROCEDURE proc_B(param1 IN VARCHAR2, param2 IN VARCHAR2)AS

BEGIN

INSERT INTO T_B VALUES(param1, param2);END;

(2)编写Java代码:

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;

/*** 存储过程测试

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call proc_B(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.setString(2, "TEST");

cstmt.execute();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

四、相关知识

1. 在plsql developer中测试存储过程时可以在存储过程名上右击选择 “测试” ,如果需要提供参数可以在下方填入参数,如果没有参数则点击执行按钮即可。

java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程相关推荐

  1. 课程设计代写java,JAVA课程设计作业代做、代写JAVA编程设计作业、代写data留学生作业...

    JAVA课程设计作业代做.代写JAVA编程设计作业.代写data留学生作业 日期:2020-06-13 11:30 JAVA Coursework (30 marks) Suppose you nee ...

  2. java一天一次_做JAVA两年,月薪18k,这些自学心得你绝对值得借鉴

    我是一个做了两年java的小程序员,目前在杭州工作,月薪是18K,经历过两次跳槽,第一次跳槽拿到了12K的offer,第二次跳槽拿到现在18K的offer.我上的大专,在学校是学机电一体化的,接触过工 ...

  3. javaweb做什么能赚钱_做一个完整的Java Web项目需要掌握的技能

    原文链接:http://blog.csdn.net/JasonLiuLJX/article/details/51494048 最近自己做了几个Java Web项目,有公司的商业项目,也有个人做着玩的小 ...

  4. 文件上传java前端怎么写_做一个文件上传,前端是ajax提交数据后台是java,这个错误怎么办...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/ ...

  5. java 判断是否夏令时_确定指定日期的Java夏令时(DST)是否处于活动状态

    我有一个Java类,它占用一个位置的纬度/经度,并在夏时制开启和关闭时返回GMT偏移量.我正在寻找一个简单的方法来确定Java如果当前日期是在夏令时间,所以我可以应用正确的偏移量.目前,我只对美国时区 ...

  6. java 模仿支付成功_我的大学到研究生自学 Java 之路,过程艰辛,不放弃,保持热情,最终发现我是这样拿到大厂 offer 的!...

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:本人真实经历:面试了20家大厂之后,发现这样介绍项目经验,显得项目很牛逼! 这一部分,其实,以前在自己的公众号写 ...

  7. java护照号码校验_学无止境之小白学java……第001天

    学习主题:预科阶段 对应视频: http://www.itbaizhan.cn/course/id/18.html 对应作业: 1. 为什么需要学编程,什么样的人可以做程序员? 编程是现实逻辑的表达, ...

  8. 与Java的初吻_ The First Kiss On Java

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 初探对话 The First Exploration Foreword 前语 一.请你喝一杯Java咖啡 二.与JAVA的初次遇见 1 ...

  9. java面试题成都_成都汇智动力-java面试——多线程面试题

    原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...

最新文章

  1. nanodet训练voc数据集
  2. 【如何快速的开发一个完整的iOS直播app】(美颜篇)
  3. Windows7 网上邻居设置
  4. 学习笔记Spark(一)—— Spark入门
  5. 凭证 90000000 保存(帐户确定出错)
  6. 职场求生:老板说,解决不了用户流失,就要解决我,咋办?
  7. 两间计算机房的女老师,我的女老师作文.doc
  8. 开始→运行→命令 总结大全
  9. 关于如何使用的MSCS(微软群集服务器)中的iSCSI Guest Initiators (客户机启动器)...
  10. 前端学习(2259)查看历史
  11. nat - 虚拟服务器设置,nat 虚拟服务器设置
  12. 中兴高调秀Axon 10 Pro 5G版20倍变焦样张:号称媲美万元广角镜头
  13. virtual 修饰符与继承对析构函数的影响(C++)
  14. css3技巧——产品列表之鼠标滑过效果(一)
  15. 中国知名的12个股份制商业银行,你知道几个?
  16. 常见单位换算[时间,距离,热量...]
  17. 以时间作为文件名的后缀
  18. 端午百望山爬山活动-金山词霸运营团队活动
  19. Python Prep随想练习-Day3
  20. VMware下ubuntu与windows主机共享文件夹

热门文章

  1. 你的项目是否真的需要 DevOps?
  2. 圣诞抽奖 | 2018年的开发者,经历了裁员、加班种种不堪,2019年的你如何获得升职加薪的机会?...
  3. 如何成为云计算专家?这些必须知道
  4. 混合云异军突起 英特尔的全“芯”体验为企业保驾护航
  5. harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用?...
  6. python 闭包_Python中的闭包
  7. CentOS 7 上安装vim 解決 centos -bash: vim: command not found
  8. Vue - 去除控制台“你正在开发模式下运行Vue”的警告
  9. 大事件后台管理系统开发实战(下)
  10. mysql 主从备份 主服务器配置_同一服务器配置Mysql主从备份