java程序在调用oracle的存储过程时 能不能传入一个数组

比如说我现在有一个数组aa[1]=1,aa[2]=2,aa[3]=3.这个数组aa能不能传入存储过程,并在存储过程中使用该数组的每个值... 比如说我现在有一个数组
aa[1]=1,
aa[2]=2,
aa[3]=3.

这个数组aa能不能传入存储过程,并在存储过程中使用该数组的每个值
展开
 我来答
冰火两重天
2013-03-15 · TA获得超过1425个赞
知道小有建树答主
回答量:1489
采纳率:0%
帮助的人:984万
展开全部
这个是我自己写的一个例子,你看看:
在命令窗口执行以下语句,创建自定义类型NESTEDARRAY。
create or replace TYPE NESTEDARRAY IS TABLE OF NUMBER;

在存储过程中使用自定义类型NESTEDARRAY。
PROCEDURE GET_ARR_RESULT(INPUTARRAY IN NESTEDARRAY, AR OUT NESTEDARRAY) IS
BEGIN
AR := NESTEDARRAY();

FOR I IN 1 .. INPUTARRAY.COUNT LOOP
AR.EXTEND;
AR(I) := I|| INPUTARRAY(I);
END LOOP;
END GET_ARR_RESULT;

Java代码:
import java.sql.Connection;
import java.sql.SQLException;

import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;

/**
* Java获取Oracle存储过程返回自定义类型
* @author lucky star
*
*/
public class OracleTypeResultTest {

/**
* @param args
*/
public static void main(String[] args) {
Connection con = null;
OracleCallableStatement ocs = null;
String sql = "{call test.GET_ARR_RESULT(?,?)}";

try {
con = DBUtil.dbUtil.getConnection();
ocs = (OracleCallableStatement) con.prepareCall(sql);
String[] params = {“10001”,”10003”};
ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("NESTEDARRAY", con);
ARRAY inputArray = new ARRAY(arrayDesc, con, params);
ocs.setARRAY(1, inputArray);
ocs.registerOutParameter(2,OracleTypes.ARRAY,"NESTEDARRAY");
ocs.execute();

ARRAY array = ocs.getARRAY(2);
Datum[] datum = array.getOracleArray();
for (int i=0;i<datum.length;i++) {
System.out.println(datum[i].intValue());
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(ocs!=null)ocs.close();
if(con!=null)con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}

用VARCHAR2测试,发现存储过程中无法获取到传入的数组的值。
不过,将自定义类型由varchar2改成NVarchar2就成功了。
追问
我是java新手,我把你的代码运行了一下,发现有错误。无法解析DBUtil
hb_wxd
2013-03-15 · 超过33用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:91万
展开全部
调用存储过程是可以传数组的,首先oracle编写的存储过程是需要带有数组参数的

参考资料给出例子很典型。

参考资料: http://hi.baidu.com/vhook/item/af4324607ff18c94c5d249d3

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式