一:无返回值的存储过程调用

存储过程:

CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

BEGIN

INSERT INTO DBO.EMP (ID,NAME) VALUES (PARA1, PARA2);

END PRO_1;

Java代码:

import java.sql.*;
import java.sql.ResultSet;

public class CallProcedureTest1 {

public CallProcedureTest1() {
super();
}

public static void main(String[] args) {

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl ";
String user = "admin";
String pwd = "password";

Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;

try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call DBO.PRO_1(?,?) }");
cs.setString(1, "10");
cs.setString(2, "Peter");
cs.execute();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
}
}

}

}

备注,存储过程PRO_1中用到了表EMP(ID, NAME),需事先建好

二:有返回值的存储过程(非结果集)

存储过程:

CREATE OR REPLACE PROCEDURE PRO_2(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS

BEGIN

SELECT INTO PARA2 FROM EMP WHERE ID= PARA1;

END PRO_2;

Java代码:

import java.sql.*;

public class CallProcedureTest2 {

public CallProcedureTest2() {
super();
}

public static void main(String[] args) {

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "admin";
String pwd = "password";
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;

try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call DBO.PRO_2(?,?) }");
cs.setString(1, "10");
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();

String name = cs.getString(2);
System.out.println("name: " + name);
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
}
}

}

}

注意:cs.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。

三:返回列表

由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,

1. 建一个程序包。如下:

CREATE OR REPLACE PACKAGE MYPACKAGE AS

TYPE MY_CURSOR IS REF CURSOR;

END MYPACKAGE;

2. 建立存储过程,如下:

CREATE OR REPLACE PROCEDURE PRO_3(p_CURSOR out MYPACKAGE.MY_CURSOR) IS

BEGIN

OPEN p_CURSOR FOR SELECT * FROM DBO.EMP;

END PRO_3;

可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。

Java代码:

import java.sql.*;
import java.sql.ResultSet;

public class CallProcedureTest2 {

public CallProcedureTest2() {
super();
}

public static void main(String[] args) {

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "admin";
String pwd = "password";

Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call DBO.PRO_3(?) }");
cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
rs = (ResultSet) cs.getObject(1);

while (rs.next()) {
System.out.println("\t" + rs.getString(1) + "\t"
+ rs.getString(2) + "\t");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
}
} catch (SQLException e) {
}
}

}

}

注意:在执行前一定要先把oracle的驱动包放到class路径里,否则会报错。

转载于:https://www.cnblogs.com/icewee/articles/2019807.html

Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)相关推荐

  1. C#调用ORACLE存储过程返回结果集及函数

    ORACLE段: 首先在ORACLE建立PACKAGE和PACKAGE BODY,将在这里面定义函数和存储过程返回结果集. 1:建立PACKAGE: CREATE OR REPLACE package ...

  2. Java 调用 Oracle 存储过程返回结果集

    1. 建立 ref cursor 类型和过程 Sql代码 CREATE OR REPLACE PACKAGE types AS TYPE ref_cursor IS REF CURSOR; END; ...

  3. oracle 存储过程返回,Oracle 存储过程返回结果集 (转)

    Oracle 存储过程返回结果集 (转)[@more@] 1.返回数组 (作者:/Message_Board/Send.?sendto=enhydraboy" target=_blank&g ...

  4. 存储过程之八-java代码调用oracle存储过程

    一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...

  5. java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)

    oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数. 下面是详细情况说明: 一:无返回值的存储过程调用 存储过程: creat ...

  6. VB调用ORACLE存储过程返回多记录集

    一直没有写原创的习惯,每次都是从别的贴子拷贝过来.实在是不好意思.最近想把自己做的一个项目中所解决的问题和大家共享一下.希望对遇见这种情况的朋友有所帮助.       程序中要用到VB调用ORACLE ...

  7. java调用ORACLE 存储过程返回值22

    存储过程代码如下:     create   or   replace   package   mysp   is         type   refcursor   is   ref   curs ...

  8. c# oracle存储过程返回结果集,一个简单的实例给大家分享C#中调用oracle的存储过程...

    Oracle方面 1.创建Oracle过程存储 create or replace procedure proce_test(paramin in varchar2,paramout out varc ...

  9. vb.net调用oracle存储过程,今天搞好了VB.NET调用Oracle存储过程返回游标的问题

    代码: Public Function GetData(ByVal procDate As String) As ArrayListTry Dim conn As New Oracle.DataAcc ...

最新文章

  1. java交通工具的类继承代码_Java作业-交通工具继承
  2. 士兵杀敌(二)(线段树+树状数组)
  3. mysql 左连接 和全连接_mysql左连接,右连接,内连,全连
  4. 大厂运维必备技能:PB级数据仓库性能调优
  5. 计算机视觉目标检测算法总结1——简介
  6. A10负载均衡设备基础配置
  7. paip.手机时间设置不能修改灰色禁用 解决大法
  8. 【路径规划】基于matlab GUI A_star算法最短路径规划【含Matlab源码 633期】
  9. 全三轨磁条卡读写器|写卡器MSR606的驱动安装与Demo软件测试操作指南
  10. webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器...
  11. php7.4中让gd库支持jpeg格式
  12. ITIL问题管理流程设计
  13. 幼儿python编程书籍_少儿Python编程入门书籍分享
  14. 深度学习面试每日一题
  15. 一次搞定亚马逊 Used Sold as New 二手品申诉,速度 Get!
  16. 公司网络很慢很卡的原因分析与处理
  17. 51nod 1429 巧克力
  18. zz我们都回不去了-南大校门被拆
  19. 双非计算机硕士何去何从(2)
  20. 洛谷P3373 线段树2(乘法加法lazytag)

热门文章

  1. python无师自通配套资源_Python Tkinter Pack布局管理器(超级详细,看了无师自通)...
  2. 当代计算机技术在建筑设备中的应用,智能化建筑中计算机技术应用研究原稿(样例3)...
  3. java 窗口开始_Java窗口(JFrame)从零开始(3)——绝对布局
  4. 管道 过滤器风格 java_完成基于管道过滤器风格的KWI实现.doc
  5. MySQL索引效率对比_mysql下普通索引和唯一索引的效率对比
  6. 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
  7. 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...
  8. matlab中cell用法
  9. bootstrap table 分组_bootstrap-table组合表头的实现方法
  10. JAVA接口的访问权限_Java中访问权限-类和接口