1. 建立 ref cursor 类型和过程

Sql代码

CREATE OR REPLACE PACKAGE types
AS
TYPE ref_cursor IS REF CURSOR;
END;
/
CREATE TABLE STOCK_PRICES(    
RIC VARCHAR(6) PRIMARY KEY,    
PRICE NUMBER(7,2),    
UPDATED DATE );    
SQL> insert into stock_prices values('2',11,sysdate);
已创建 1 行。
SQL> insert into stock_prices values('3',13,sysdate);
已创建 1 行。
SQL> insert into stock_prices values('4',15,sysdate);
已创建 1 行。
SQL> insert into stock_prices values('5',20,sysdate);
已创建 1 行。
SQL> insert into stock_prices values('6',21,sysdate);
已创建 1 行。
SQL> insert into stock_prices values('7',25,sysdate);
已创建 1 行。
SQL> commit;

CREATE OR REPLACE FUNCTION sp_get_stocks(v_price IN NUMBER)
RETURN types.ref_cursor
AS
stock_cursor types.ref_cursor;
BEGIN
OPEN stock_cursor FOR
SELECT ric,price,updated FROM stock_prices WHERE price < v_price;
RETURN stock_cursor;
END;
/
SQL> var results refcursor
SQL> exec :results := sp_get_stocks(20.0)
SQL> print results

3. 从 Java 调用

Java代码

import java.sql.*;    
import java.io.*;    
import oracle.jdbc.driver.*;    
public class JDBCDemo {    
/**   
* Compile-time flag for deciding which query to use   
*/   
private boolean useOracleQuery = true;    
/**   
* Class name of Oracle JDBC driver   
*/   
private String driver = "oracle.jdbc.driver.OracleDriver";    
/**   
* Initial url fragment   
*/   
private String url = "jdbc:oracle:thin:@";    
/**   
* Standard Oracle listener port   
*/   
private String port = "1521";    
/**   
* Oracle style of calling a stored procedure   
*/   
private String oracleQuery = "begin ? := sp_get_stocks(?); end;";    
/**   
* JDBC style of calling a stored procedure   
*/   
private String genericQuery = "{ call ? := sp_get_stocks(?) }";    
/**   
* Connection to database   
*/   
private Connection conn = null;    
/**   
* Constructor. Loads the JDBC driver and establishes a connection   
*   
* @param host the host the db is on   
* @param db the database name   
* @param user user's name   
* @param password user's password   
*/   
public JDBCDemo(String host, String db, String user, String password)    
throws ClassNotFoundException, SQLException {    
// construct the url    
url = url + host + ":" + port + ":" + db;    
// load the Oracle driver and establish a connection    
try {    
Class.forName(driver);    
conn = DriverManager.getConnection(url, user, password);    
}    
catch (ClassNotFoundException ex) {    
System.out.println("Failed to find driver class: " + driver);    
throw ex;    
}    
catch (SQLException ex) {    
System.out.println("Failed to establish a connection to: " + url);    
throw ex;    
}    
}    
/**   
* Execute the stored procedure   
*   
* @param price price parameter for stored procedure   
*/   
private void execute(float price)    
throws SQLException {    
String query = useOracleQuery ? oracleQuery : genericQuery;    
System.out.println("Query: " + query + "n");    
CallableStatement stmt = conn.prepareCall(query);    
// register the type of the out param - an Oracle specific type    
stmt.registerOutParameter(1, OracleTypes.CURSOR);    
// set the in param    
stmt.setFloat(2, price);    
// execute and retrieve the result set    
stmt.execute();    
ResultSet rs = (ResultSet)stmt.getObject(1);    
// print title
System.out.println("ric   price    updated");
System.out.println("---   -----    -------");
// print the results    
while (rs.next()) {    
System.out.println(rs.getString(1) + "     " +    
rs.getFloat(2) + "     " +    
rs.getDate(3).toString());    
}    
rs.close();    
stmt.close();    
}    
/**   
* Cleanup the connection   
*/   
private void cleanup() throws SQLException {    
if (conn != null)    
conn.close();    
}    
/**   
* Prints usage statement on stdout   
*/   
static private void usage() {    
System.out.println("java com.enterprisedt.demo.oracle.JDBCDemo " +    
" host db user password price");    
}    
/**   
* Runs the class   
*/   
public static void main(String[] args) throws Exception {    
if (args.length != 5) {    
JDBCDemo.usage();    
System.exit(1);    
}    
else {    
try {    
// assign the args to sensible variables for clarity    
String host = args[0];    
String db = args[1];    
String user = args[2];    
String password = args[3];    
float price = Float.valueOf(args[4]).floatValue();    
// and execute the stored proc    
JDBCDemo jdbc = new JDBCDemo(host, db, user, password);    
jdbc.execute(price);    
jdbc.cleanup();    
}    
catch (ClassNotFoundException ex) {    
System.out.println("Demo failed");    
}    
catch (SQLException ex) {    
System.out.println("Demo failed: " + ex.getMessage());    
}    
}    
}    
}

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

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

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

  2. Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)

     一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...

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

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

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

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

  5. java调用oracle过程,JAVA调用ORACLE存储过程报错

    当前位置:我的异常网» Java Web开发 » JAVA调用ORACLE存储过程报错 JAVA调用ORACLE存储过程报错 www.myexceptions.net  网友分享于:2015-07-1 ...

  6. java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程

    一.需求 传入一个参数,返回一条或多条记录(列表). 二.实现步骤 1. 编写Oracle存储过程. -- 声明包和包体的语句应该分两次执行,即使声明在前定义在后,如果一起执行依然会编译出错 --调用 ...

  7. java 调用 oracle存储过程_java代码调用oracle存储过程

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

  8. java调用oracle存储过程_java调用oracle存储过程详解

    之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧. 首先来看一下项目结构: 在数据库创建存储过程的脚本,假如,使用的是本地的oracl ...

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

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

最新文章

  1. Overload Overwrite Override
  2. mysql Navcat触发器生成订单号
  3. Nginx初学第一步
  4. Go的GAPATH详解
  5. springboot+redis实现分布式session共享
  6. Qwt中如何在曲线上标定特定点
  7. JS----深拷贝和浅拷贝
  8. Windows下安装python2和python3双版本
  9. 机器学习相关的一些术语
  10. 关于Linux内核的一些问题
  11. 设计模式笔记 16. Mediator 中介者模式(行为型模式)
  12. Directx11教程40 纹理映射(10)
  13. C#版常用设计模式入门
  14. 社区智慧+机器智能=奇虎经验的知识机器人
  15. 基于Web的通用BBS系统的建立与维护
  16. 1.2_CentOS 7 终端系统识别挂载 USB 的 NTFS 分区
  17. canvas实现英雄联盟战力图
  18. MySql 配置 方法
  19. 手把手教你通过vue-cli搭建手机端框架
  20. 看完让你彻底理解 WebSocket 原理

热门文章

  1. 【规范】前端编码规范——jquery 规范
  2. Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(二)
  3. java泛型反映调用方法体内类型引用问题
  4. 企业命令linux下处理实时日志生成另一个实时日志
  5. 500强公司面试的经典正确与错误回答对比!
  6. oracle将213变成123,oracle 转换函数
  7. 怎么用matlab画TM11,矩形波导TM11模matlab仿真
  8. Caffe + windows + python3.5安装
  9. Warm Up before Exercise
  10. 笔记68 Redis数据库