`

JDBC里取得Oracle存储过程动态结果集

阅读更多

JDBC里取得Oracle存储过程动态结果集

1. 关于oracle和结果集
  
  其实在大多数情况下,我们并不需要从oracle存储过程里返回一个或多个结果集,除非迫不得已。
  
  如果大家用过MS SQL Server或Sybase SQL Server,那么从存储过程返回一个动态的结果集是一件非常容易的事情,只要在存储过程结束时写上
  
  “select column1,column2,.... from table_list where condition“
  
  就可以了。
  
  但在Oracle中不能这样做. 我们必须使用Oracle Cursor.
  
  在Oracle PL/SQL中,Cursor用来返回一行或多行记录,借助Cursor,我们可以从结果集中取得所有记录.
  
  Cursor并不难,但是要从Oracle存储过程中返回结果集, 就需要用到Cursor变量,Cursor变量Oracle PL/SQL的类型是REF CURSOR, 我们只要定义了REF CURSOR 类型就可以使用Cursor变量. 比如我们可以这样定义:
  TYPE ref_cursor IS REF CURSOR;
  
  了解了Cursor以及Cursor变量,下面就介绍如何使用Cursor变量给JDBC返回结果集.
  
  2. 定义表结构
  
  在以下例子里,我们要用到一张表Hotline.
  
  Create table hotline(country varchar2(50),pno varchar2(50));
  
  3. 定义存储过程
  
create or replace package PKG_HOTLINE is  --定义包名

type HotlineCursorType is REF CURSOR;   --定义游标

function getHotline return HotlineCursorType; --定义方法
end;

--写入包内容
create or replace package body PKG_HOTLINE as
--写入方法内容
function getHotline return HotlineCursorType is
hotlineCursor HotlineCursorType;
begin
open hotlineCursor for select * from hotline;
return hotlineCursor;
end;
end;
  
  在这个存储过程里,我们定义了HotlineCursorType 类型,并且在存储过程中简单地查找所有的记录并返回HotlineCursorType.
  
  4. 测试存储过程
  
  在Oracle SQL/Plus里登陆到数据库. 按以下输入就看到返回的结果集.
  
  SQL> var rs refcursor;SQL> exec :rs := PKG_HOTLINE.getHotline;SQL> print rs;
  
  5. Java调用
  
  简单地写一个Java Class.
  
  ....public void openCursor(){Connection conn = null;ResultSet rs = null;
  CallableStatement stmt = null;
  String sql = “{? = call PKG_HOTLINE.getHotline()}“;
  try{conn = getConnection();stmt = conn.prepareCall(sql);
  stmt.registerOutParameter(1,OracleTypes.CURSOR);
  stmt.execute();
  rs = ((OracleCallableStatement)stmt).getCursor(1);
  while(rs.next()){String country = rs.getString(1);
  String pno = rs.getString(2);
  System.out.println(“country:“+country+“|pno:”+pno);
  }}catch(Exception ex){ex.printStackTrace();
  }finally{closeConnection(conn,rs,stmt);
  }}.....
  
  好了,大功告成.

分享到:
评论

相关推荐

    Oracle函数取得姓名对应的拼音 字典数据

    因此,在设计这类解决方案时,通常会结合缓存策略,比如将转换结果存储在表中,或者使用Oracle的Materialized View来预计算拼音,以提高查询速度。 总的来说,处理Oracle数据库中的汉字转拼音是一个技术挑战,需要...

    Oracle.DBA两日速成课程

    课程会介绍如何使用JDBC(Java Database Connectivity)API连接Oracle数据库,执行SQL语句,并处理结果集。还会探讨Java存储过程的编写和调用,以及如何在Oracle数据库中嵌入Java代码。 五、故障排查与高可用性 在...

    oracle课件适合初学者

    10. **数据库连接与应用开发**:理解各种数据库连接方式,如ODBC、JDBC、Oracle Instant Client等,以及如何在不同编程语言中与Oracle数据库交互。 通过这个Oracle课件,你将逐步深入Oracle数据库的核心概念和技术...

    mysql和oracle数据库帮助文档API

    Oracle数据库的API主要包括Oracle Call Interface (OCI)、Java Database Connectivity (JDBC)、Oracle Pro*C等,这些API允许开发者通过不同的编程语言与Oracle数据库进行通信。"Oracle官方SQL参考手册.chm"提供了...

    ORACLE数据库面试题解答DBA数据库管理员JAVA程序员架构师必看.zip

    此外,了解如何使用PL/SQL(Oracle的Procedural Language/Structured Query Language)编写存储过程和函数,能够提升应用程序的性能和效率。 在架构层面,Oracle的高可用性和分布式特性是讨论的重点。例如,RAC...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    2.12 执行计划并取得数据行 50 2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 3.1 全扫描访问方法 55 3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全扫描与多块读取 60 ...

    PL-SQL教程(私塾在线)视频配套学习资料

    - **JDBC调用存储过程**:通过Java编程语言来调用数据库中的存储过程。 #### 七、PL-SQL的应用场景 - **数据处理**:批量更新或查询数据。 - **业务逻辑实现**:通过存储过程实现复杂的业务逻辑。 - **安全性管理**...

    db2开发经验

    15. **从存储过程返回结果集(游标)的用法:** 存储过程可以返回一个游标作为结果集,以便应用程序逐行处理数据。 16. **类型转换函数:** 常见的类型转换函数包括`CAST`和`CONVERT`,用于在不同类型之间转换数据。 ...

    ocp考试模拟工具加题库051_052_053

    在学习过程中,考生应着重理解Oracle数据库的基本概念,例如表空间、索引、视图、存储过程、触发器等。同时,掌握SQL语言,包括DML(数据操纵语言)如INSERT、UPDATE、DELETE,以及DDL(数据定义语言)如CREATE、...

    牛新庄:DB2使用经验

    - **从存储过程返回结果集的用法**:使用`RETURN QUERY`语句返回查询结果,例如: ```sql CREATE PROCEDURE get_data() BEGIN RETURN QUERY SELECT * FROM table_name; END ``` - **类型转换函数**:使用`...

    DB2手册pdf

    在存储过程中返回结果集通常涉及声明和打开游标,然后将其作为输出参数返回。例如: ```sql CREATE PROCEDURE MyProcedure (OUT cursor_result CURSOR FOR SELECT * FROM my_table) BEGIN DECLARE CONTINUE HANDLER...

    JSP数据库编程指南

    此外,还可能涉及Oracle特定的特性,如存储过程、触发器、游标等的使用,以及如何优化JSP与Oracle的交互以提高性能。 使用"使用说明.htm"和"使用说明.txt"文件,读者可以了解如何有效地阅读和应用书中的内容,比如...

    java功能代码

    首先,指定Oracle JDBC驱动的类名,并定义用于存储数据库连接的变量。在`init()`方法中,通过读取配置文件中的属性(如数据库URL、用户名和密码),加载JDBC驱动并建立数据库连接。`fetch()`方法用于执行SQL查询,...

    韩顺平.玩转oralce迅雷下载地址

    - **Java与Oracle的集成**:利用Oracle提供的JDBC驱动,实现Java应用程序与Oracle数据库之间的交互。 - **Web应用程序开发**:使用Oracle作为后端数据库,支持Web应用程序的数据存储需求。 ### Oracle实践技巧 #...

    达内java工程师训培笔记

    理解Oracle的数据类型、查询语句、表的创建与修改,以及触发器和存储过程的使用,对于进行高效的数据管理和分析至关重要。 6. **XML(Extensible Markup Language)**:XML是一种标记语言,常用于数据交换和配置...

    JavaJFrame做的一个商店购买系统

    2. JDBC的连接与操作,如建立数据库连接、执行SQL语句、处理结果集。 3. 数据库设计,包括商品表、用户表、订单表等,以及它们之间的关系。 4. 模拟业务逻辑,如购物车的增删改查、订单的生成和保存。 5. 错误处理和...

    Oracle 常见问题1000问 chm

    2. **SQL与PL/SQL**:SQL是用于查询和管理关系数据库的语言,而PL/SQL是Oracle特有的编程语言,用于编写存储过程、函数和触发器。熟悉这两种语言是进行Oracle开发的核心技能。 3. **表和索引**:表是数据存储的基本...

Global site tag (gtag.js) - Google Analytics