我有一个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连接的方式?
答案 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
是集合中元素的长度。