1.声明
CREATE OR REPLACE TYPE USERNAME_ARRAY AS VARRAY(1000) of varchar(100)
注意:这里不能用IS TABLE OF,不然java调用的时候会有问题
2.创建存储过程
CREATE OR REPLACE PROCEDURE sp_test
(
ia_bill_no IN USERNAME_ARRAY
)
。。。
BEGIN
。。。
END;
3.java调用
(1)获取OracleConnection
public OracleConnection getOracleConnection(Connection con) throws SQLException {
if (con instanceof DelegatingConnection) {
Connection nativeCon = ((DelegatingConnection) con).getInnermostDelegate();
return (nativeCon != null ? (OracleConnection)nativeCon : (OracleConnection)con.getMetaData().getConnection());
}
return null;
}
(2)调用执行
OracleConnection connection = getOracleConnection(dataSource.getConnection());
String sql = " {call sp_test(?)} ";
statement = (OracleCallableStatement)connection.prepareCall(sql);
ArrayDescriptor orderArray = ArrayDescriptor.createDescriptor("USERNAME_ARRAY", connection);
statement.setARRAY(1, new ARRAY(orderArray,connection,condition.参数数组));
statement.execute();
注意:java调用时候需要使用相应数据库的Connection和statement,因为我项目中数据源用的是DBCP,拿到的不是原始连接,所以获取连接的时候做了相应的转换处理。另外在数据源的配置中需要设置accessToUnderlyingConnectionAllowed为true,不然获取连接时还是会有问题的。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
。。。。
<property name="accessToUnderlyingConnectionAllowed" value="true" />
</bean>
分享到:
相关推荐
总的来说,理解如何在Spring中正确地调用Oracle存储过程并传递数组参数是提高应用程序效率和数据库操作灵活性的重要技能。这涉及到了数据库设计、Java编程、Spring框架的使用以及对Oracle特定特性的掌握。通过上述...
Oracle数据库支持通过数组参数来进行批量操作,这在处理大量数据时能显著提高性能。在本例中,我们探讨了如何使用数组存储过程进行批量插入和删除。数组在Oracle中的使用通常涉及定义PL/SQL类型,这允许我们创建索引...
总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...
Oracle存储过程是数据库中的预编译SQL代码块,可以接收输入参数,执行复杂的业务逻辑,并返回结果。在C#中,我们可以使用Command对象来执行这些存储过程,并获取返回的数据集。 首先,确保已经安装了Oracle的数据...
例如,对于输出参数为自定义数组的存储过程`make_logincard_pro`,你需要使用`OracleCallableStatement`的`setArray`和`getArray`方法来设置和获取数组参数。在调用存储过程之前,需要将Java中的数组转换为`Oracle...
- **总结**: Oracle存储过程是数据库中非常重要的组成部分,它不仅可以提高应用程序的性能,还可以简化复杂的数据处理逻辑。了解并掌握Oracle存储过程的使用方法对于数据库开发者来说至关重要。 - **未来发展方向**:...
For 循环是 Oracle 存储过程中的一种循环结构,使用 For 语句可以遍历游标或数组。例如: ```sql create or replace procedure test() as Cursor cursor is select name from student; name varchar(20); begin ...
其中,过程名是存储过程的名称,参数列表是存储过程的输入参数列表,变量声明是声明变量的语句,执行体是存储过程的执行体。 例如,创建一个名为 test 的存储过程,输入参数为 workDate: ```sql CREATE OR REPLACE...
Oracle 存储过程是数据库中的一种重要组件,它可以实现复杂的业务逻辑和数据处理。本手册将详细介绍 Oracle 存储过程的使用方法和相关知识点。 1. 创建存储过程 创建存储过程的基本语法为:`CREATE OR REPLACE ...
Oracle存储过程是一组为了完成特定功能的SQL语句集,它被编译并存储在数据库中,可以被多次调用执行,提高代码的复用性并减少网络流量。本手册将详细介绍Oracle存储过程的创建、变量使用、控制结构、游标等高级特性...
总结来说,本文详细讲解了如何在MyBatis中调用PostgreSQL的存储过程,特别是如何处理数组类型的输入参数。通过自定义`TypeHandler`,我们可以使MyBatis与PostgreSQL的数组类型无缝对接,实现高效、准确的数据操作。
### Oracle存储过程及触发器总结 #### 一、Oracle 存储过程概述 在Oracle数据库中,存储过程是一种预先编译好的SQL代码块,它可以接受输入参数、返回单个值或多个值,并能够调用其他存储过程。存储过程在数据库...
本篇文章将详细介绍一个用于Java应用程序中调用Oracle存储过程的通用类,帮助开发者更高效地实现相关功能。 #### 核心知识点解析 ##### 1. 类的基本结构 此通用类位于`com.gemship.common.service.impl`包下,名...
Oracle存储过程是PL/SQL程序单位,用于封装逻辑,以执行特定任务。在Oracle数据库中,存储过程常用技巧覆盖了从创建和参数传递方式到异常处理和游标使用等多个方面。在学习编写存储过程时,不仅要掌握基本结构,还...
其中,CREATE OR REPLACE PROCEDURE 用于创建或替换存储过程,存储过程名字是存储过程的名称,参数 1 和参数 2 是存储过程的输入参数,变量 1 和变量 2 是存储过程中的变量。 二、变量赋值 在 Oracle 存储过程中,...
在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...
总结,Java调用Oracle存储过程涉及的关键点包括:JDBC连接,CallableStatement,输入/输出参数的设定,以及结果集的处理。理解这些知识点,能够帮助开发者有效地实现数据库操作,提升应用性能。