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

时间:2009-09-09 13:41:26

标签: java oracle arrays stored-procedures

我有一个访问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是一个公共TYPE,在Oracle Package中定义,如下所示:

TYPE VARCHAR2_ARR是VARCHAR2的表(50);

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

PROCEDURE MY_PROCEDURE  
    (V_ARR_ARG1  IN VARCHAR2_ARR,  
     V_ARR_ARG2  IN VARCHAR2_ARR)  

2 个答案:

答案 0 :(得分:1)

类型VARCHAR2_ARR是PLSQL类型,您将无法直接从java接口。我建议您查看this thread on AskTom关于类似问题的内容。

以下是一些建议:

  • 创建一个可以从java
  • 绑定的SQL TYPE
  • 从java插入临时表并在plsql中读取

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

答案 1 :(得分:0)

我们需要在创建数据源时将accessToUnderlyingConnectionAllowed falg设置为true