gpt4 book ai didi

java - 在oracle存储过程中传递数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:10 25 4
gpt4 key购买 nike

我有一个访问 Oracle 存储过程的 Java 应用程序。存储过程的参数包括一个数组类型。我这样做如下...

con = this._getConnection();  
Connection narrowdConn = (Connection)WSJdbcUtil.getNativeConnection( (WSJdbcConnection)con );

callable = con.prepareCall("{call MY_PKG.MY_PROCEDURE(?, ?)}");


ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("VARCHAR2_ARR", narrowdConn);
ARRAY arrayArg1 = new ARRAY(arrayDescriptor, con, docNames);
ARRAY arrayArg2 = new ARRAY(arrayDescriptor, con, docTypes);

callable.setArray(1, arrayArg1);
callable.setArray(2, arrayArg2);

callable.execute();

现在,我得到了这个异常......

java.sql.SQLException: invalid name pattern: MY_PKG.VARCHAR2_ARR

VARCHAR2_ARR 是一个公共(public)类型,在 Oracle 包中定义如下:

TYPE VARCHAR2_ARR 是 VARCHAR2 表(50);

并在我的存储过程中使用...

PROCEDURE MY_PROCEDURE  
(V_ARR_ARG1 IN VARCHAR2_ARR,
V_ARR_ARG2 IN VARCHAR2_ARR)

最佳答案

VARCHAR2_ARR 类型是 PLSQL 类型,您无法直接从 java 连接它。我建议你看看this thread on AskTom关于类似的问题。

这里有一些建议:

  • 创建一个可以从 java 绑定(bind)的 SQL 类型
  • 从 java 中插入一个临时表并在 plsql 中读取它

在这两种情况下,您都必须修改 PLSQL 过程或添加新的转换过程。

关于java - 在oracle存储过程中传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com