`
gqf2008
  • 浏览: 76800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【结贴】java调用oracle包中的存储过程返回Table结果集该如何设置?

    博客分类:
  • java
阅读更多
存储过程和数据结构定义如下:
CREATE OR REPLACE PACKAGE SmsService
IS
TYPE ret_record is RECORD(
P1 VARCHAR2(20),
P2 VARCHAR2(10));
TYPE msg_array IS TABLE OF ret_record INDEX BY BINARY_INTEGER;
END;

CREATE OR REPLACE PACKAGE gqf
IS
PROCEDURE proc1(para1 in varchar2,para2 out SmsService.msg_array);
END;
=================================================================================================
java代码如下:
OracleCallableStatement proc = null;
try {
proc =(OracleCallableStatement)con.prepareCall("{ CALL gqf.proc1 (?,?) }");
proc.setString(1, req.getPhoneNumber());
proc.registerOutParameter(2, OracleTypes.ARRAY,"SmsService.msg_array");
//proc.registerOutParameter(2, OracleTypes.ARRAY,"MSG_ARRAY");
//proc.registerOutParameter(2, OracleTypes.CURSOR);
//proc.registerOutParameter(2, OracleTypes.PLSQL_INDEX_TABLE);
//proc.registerIndexTableOutParameter(2,100, OracleTypes.OTHER, 100);
proc.execute();
//proc.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (proc != null) {
try {
proc.close();
} catch (SQLException e1) {
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
}
}
}

我试了所有ORACLE的数据类型,要么是在registerOutParameter报错,要么是在execute时报错,错误类型大概就是数据类型错误,要么就是无效的参数名称,网上搜索了很多资料没有找到解决办法,所以来这里问问是否有大侠有类似的开发经验,给小弟我指点一二,不胜感激!
分享到:
评论
9 楼 gqf2008 2007-10-16  
======结贴======
8 楼 gqf2008 2007-10-16  
看的多回的少。。。。
7 楼 gqf2008 2007-10-15  
挂了这么长时间就没有一个知道的人?
6 楼 gqf2008 2007-10-14  
程序中注释的都已经试过了,数据类型不对
5 楼 cary 2007-10-13  
proc.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
4 楼 gqf2008 2007-10-12  
真的没人知道?
3 楼 gqf2008 2007-10-12  
强人们过来看看
2 楼 gqf2008 2007-10-11  
咦?到这里来了?看来综合技术区强人们都不削一顾......
1 楼 gqf2008 2007-10-11  
希望知道的人能看到

相关推荐

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.doc

    Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...

    oracle分页查询

    在`pg_query`包中,`pg_query.bdy`和`pg_query.spc`可能包含了一个带结果集的存储过程,该过程接受分页参数,返回相应的查询结果。例如,存储过程可能会像这样定义: ```sql CREATE OR REPLACE PACKAGE pg_query AS...

    存储过程,存储函数和触发器

    2. **在其他PL/SQL块中调用**:可以在其他存储过程、函数或者包中调用已有的存储过程。 ```sql DECLARE BEGIN raise_salary(101); END; ``` ### 存储函数 存储函数与存储过程类似,但主要区别在于存储函数...

    ORACLE转DB2对照全解

    **注意:** Oracle使用`rownum`来限制结果集,而DB2则使用`ROW_NUMBER()`函数来实现。 #### 十四、Returning into **Oracle:** ```sql UPDATE table SET col = new_val RETURNING col INTO v1 WHERE id = 1; ``` ...

    java 连接数据库实现用户登录功能

    1. **设置环境**:确保你已经安装了Oracle数据库和Java Development Kit(JDK)。还需要Oracle的JDBC驱动(ojdbc.jar)添加到项目的类路径中,以便Java程序能够找到并使用它来连接Oracle数据库。 2. **建立数据库表...

    Oracle11g设计与开发教程课后习题

    11. SQL查询:ORDER BY子句用于排序,未指定排序则按默认顺序,SELECT语法至少包含SELECT和FROM,DISTINCT去除重复行,UNION合并结果集,GROUP BY用于分组统计。 12. 事务控制:DECLARE不是事务控制关键字,Oracle...

    java工程师面试题

    Java工程师面试题主要涵盖多个Java基础知识领域,包括但不限于语法、框架、网络协议、文件操作、Servlet、数据库管理和数据结构。以下是对这些知识点的详细解析: 1. Hibernate中的离线查询去除重复项: Hibernate...

    jdbc -jave -sql 三大连接重要包

    - **Statement**: 用于执行静态SQL语句,返回结果集或者影响行数。如:`Statement stmt = conn.createStatement();` - **PreparedStatement**: 预编译的SQL语句,支持参数占位符,提高性能和安全性。如:`...

    Oracle包应用详解.doc

    - 类似于C++和Java语言中的类,包中的变量可以被视为类中的成员变量,而过程和函数则可以被视为类方法。 - 包支持面向对象的设计思想,便于开发人员利用面向对象的方法来编写存储过程,有助于提高系统的性能。 2....

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    java面试大全

    在Java中,可以使用 `java.io` 包中的 `InputStream` 和 `OutputStream` 类来实现文件复制。基本步骤包括打开源文件和目标文件的输入输出流,然后读取源文件并写入目标文件,最后关闭流。 4. **Servlet的创建过程...

    韩顺平j2ee-JDBC与MySQL学习笔记

    `prepareCall(sql)`则用于创建`CallableStatement`对象,用于调用数据库的存储过程。 在实际开发中,我们还会遇到诸如事务管理、结果集处理、批处理操作等高级特性。例如,`Connection`对象的`setAutoCommit(false)...

    【IT十八掌徐培成】Java基础第24天-01.Blob字段操作.zip

    在Java编程语言中,Blob(Binary Large Object)是用来存储大量二进制数据的数据库对象,如图片、音频或视频文件等。Blob字段操作是数据库编程中的一个重要环节,尤其是在处理大量非结构化数据时。本教程将围绕Java...

    JDBC技术全面详解

    7. **结果集**: 执行查询后,通过`Statement`或`PreparedStatement`的`executeQuery()`方法返回`ResultSet`,它包含了查询结果。 **SQL教程** SQL(Structured Query Language)是用于管理关系数据库的标准语言。...

    300+道中高级java工程师面试题大全含答案文档下载

    1. **Hibernate离线查询去除重复项**:在Hibernate中,使用Criteria API时,可以设置ResultTransformer为`Criteria.DISTINCT_ROOT_ENTITY`来去除查询结果中的重复实体。 2. **HTTP与SMTP协议及端口**:HTTP是用于...

    oracle 包详细讲解

    - **性能提升**:当首次调用包内的函数或过程时,Oracle会将整个包加载到内存中,后续访问时可以直接从内存读取,避免磁盘I/O操作,提高执行效率。 - **共享资源**:如果Oracle具有Procedure选项,包可以被编译并...

    jdbc连接

    5. **处理结果集**:如果执行的是查询语句,会返回ResultSet,遍历结果集。 6. **关闭资源**:最后,记得关闭Statement、Connection和ResultSet,释放资源。 ### 3. JDBC连接数据库的优化 - **预编译SQL...

    经 典 的JDBC笔记

    JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种标准接口,它由一系列接口和类构成,是Java Standard Edition(J2SE)的一部分,包含在`java.sql`和`javax.sql`包中。...

    jdbc应用详解

    5. **处理结果集**:对于查询结果,可以通过`ResultSet`接口进行处理。 - 示例代码: ```java ResultSet rs = stmt.executeQuery("SELECT * FROM table_name"); while (rs.next()) { System.out.println(rs....

Global site tag (gtag.js) - Google Analytics