存储过程和数据结构定义如下:
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时报错,错误类型大概就是数据类型错误,要么就是无效的参数名称,网上搜索了很多资料没有找到解决办法,所以来这里问问是否有大侠有类似的开发经验,给小弟我指点一二,不胜感激!
分享到:
- 2007-10-11 15:54
- 浏览 3158
- 评论(9)
- 论坛回复 / 浏览 (9 / 6670)
- 查看更多
相关推荐
Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...
在`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使用`rownum`来限制结果集,而DB2则使用`ROW_NUMBER()`函数来实现。 #### 十四、Returning into **Oracle:** ```sql UPDATE table SET col = new_val RETURNING col INTO v1 WHERE id = 1; ``` ...
1. **设置环境**:确保你已经安装了Oracle数据库和Java Development Kit(JDK)。还需要Oracle的JDBC驱动(ojdbc.jar)添加到项目的类路径中,以便Java程序能够找到并使用它来连接Oracle数据库。 2. **建立数据库表...
11. SQL查询:ORDER BY子句用于排序,未指定排序则按默认顺序,SELECT语法至少包含SELECT和FROM,DISTINCT去除重复行,UNION合并结果集,GROUP BY用于分组统计。 12. 事务控制:DECLARE不是事务控制关键字,Oracle...
Java工程师面试题主要涵盖多个Java基础知识领域,包括但不限于语法、框架、网络协议、文件操作、Servlet、数据库管理和数据结构。以下是对这些知识点的详细解析: 1. Hibernate中的离线查询去除重复项: Hibernate...
- **Statement**: 用于执行静态SQL语句,返回结果集或者影响行数。如:`Statement stmt = conn.createStatement();` - **PreparedStatement**: 预编译的SQL语句,支持参数占位符,提高性能和安全性。如:`...
- 类似于C++和Java语言中的类,包中的变量可以被视为类中的成员变量,而过程和函数则可以被视为类方法。 - 包支持面向对象的设计思想,便于开发人员利用面向对象的方法来编写存储过程,有助于提高系统的性能。 2....
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
在Java中,可以使用 `java.io` 包中的 `InputStream` 和 `OutputStream` 类来实现文件复制。基本步骤包括打开源文件和目标文件的输入输出流,然后读取源文件并写入目标文件,最后关闭流。 4. **Servlet的创建过程...
`prepareCall(sql)`则用于创建`CallableStatement`对象,用于调用数据库的存储过程。 在实际开发中,我们还会遇到诸如事务管理、结果集处理、批处理操作等高级特性。例如,`Connection`对象的`setAutoCommit(false)...
在Java编程语言中,Blob(Binary Large Object)是用来存储大量二进制数据的数据库对象,如图片、音频或视频文件等。Blob字段操作是数据库编程中的一个重要环节,尤其是在处理大量非结构化数据时。本教程将围绕Java...
7. **结果集**: 执行查询后,通过`Statement`或`PreparedStatement`的`executeQuery()`方法返回`ResultSet`,它包含了查询结果。 **SQL教程** SQL(Structured Query Language)是用于管理关系数据库的标准语言。...
1. **Hibernate离线查询去除重复项**:在Hibernate中,使用Criteria API时,可以设置ResultTransformer为`Criteria.DISTINCT_ROOT_ENTITY`来去除查询结果中的重复实体。 2. **HTTP与SMTP协议及端口**:HTTP是用于...
- **性能提升**:当首次调用包内的函数或过程时,Oracle会将整个包加载到内存中,后续访问时可以直接从内存读取,避免磁盘I/O操作,提高执行效率。 - **共享资源**:如果Oracle具有Procedure选项,包可以被编译并...
5. **处理结果集**:如果执行的是查询语句,会返回ResultSet,遍历结果集。 6. **关闭资源**:最后,记得关闭Statement、Connection和ResultSet,释放资源。 ### 3. JDBC连接数据库的优化 - **预编译SQL...
JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种标准接口,它由一系列接口和类构成,是Java Standard Edition(J2SE)的一部分,包含在`java.sql`和`javax.sql`包中。...
5. **处理结果集**:对于查询结果,可以通过`ResultSet`接口进行处理。 - 示例代码: ```java ResultSet rs = stmt.executeQuery("SELECT * FROM table_name"); while (rs.next()) { System.out.println(rs....