动态Oracle类型在Java中不可见

时间:2016-07-20 14:35:57

标签: java oracle jdbc

我有一个oracle函数,用于将一些数据从Java更新到数据库中。

功能:

 FUNCTION addFunc (
    contact_id              IN   NUMBER,
    contact_distrib_list       IN contact_array
                )
 RETURN VARCHAR2; 

数组类型在包中声明为

TYPE contact_array IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;

现在, 我试图从我的Java代码中调用此函数。

ArrayDescriptor arrayDescriptor =  ArrayDescriptor.createDescriptor("contact_array", sqlConnection);

但是,当我尝试执行上述操作时,它会抱怨该类型无法识别。

  

java.sql.SQLException:无效的名称模式:contact_array

我在这里尝试了所有提供sql名称的方法。我尝试了架构name.package name.array name等但仍然是同样的错误。

我是否错误地在oracle中定义了类型?

是否还有其他使用Java JDBC连接的方式?

1 个答案:

答案 0 :(得分:0)

如果要将PL / SQL索引表(也称为关联数组)传递给存储过程,则需要使用Oracle extensions to JDBC。您不能将ArrayDescriptor与索引表一起使用。

特别是,您需要使用OracleCallableStatement.setPlsqlIndexTable方法,例如:

((OracleCallableStatement)callableStatement).setPlsqlIndexTable(
    3, data, data.length, data.length, Types.VARCHAR, 100);

我假设索引表是参数编号3,而data包含您希望作为表内容传递的String数组。数字100是集合中元素的长度。