2016-07-20 61 views
0

我有一個oracle函數用於從Java更新數據到數據庫中。動態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名稱等,但仍然是相同的錯誤。

我錯誤地定義在oracle中的類型?

是否有任何其他方式使用Java JDBC連接?

回答

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是集合中元素的長度。