我想將關聯數組返回給java,但面臨異常。我使用專有的持久層,因此我將無法發佈我的代碼,但在谷歌上搜索時,我發現了與我的東西完全相似的東西:plsql - 如何將關聯數組返回給java
=========== ================
create or replace PACKAGE testLookAside as
type AssocArry IS TABLE OF varchar(30) INDEX BY VARCHAR(30);
function lookupMasterData return AssocArry;
end testLookAside;
/
create or replace PACKAGE BODY testLookAside as
function lookupMasterData_ return AssocArry as
retval AssocArry;
begin
retval('1') := '1';
retval('2') := '2';
retval('3') := '3';
retval('4') := '4';
return retval;
end lookupMasterData_;
/
function lookupMasterData return AssocArry as
retVal AssocArry;
begin
retVal := lookupMasterData_();
return retVal;
end lookupMasterData;
end testLookAside;
Statement s = null;;
Class.forName("oracle.jdbc.driver.OracleDriver");
// set up connection here....
s=con.createStatement();
//String query = "begin ? := DEVELOPER.testLookAside.lookupMasterData(); end;";
String query = "{? = call DEVELOPER.testLookAside.lookupMasterData()}";
OracleCallableStatement stmt = (OracleCallableStatement)con.prepareCall(query);
// register the type of the out param - an Oracle specific type
stmt.registerIndexTableOutParameter(1, 30, OracleTypes.VARCHAR, 30);
stmt.execute();
而且我一直得到這樣的錯誤:
Exception in thread "main" java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00382: expression is of wrong type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
誰能解釋正確的方法是從訪問的數據類型是什麼JDBC?
而且,如果我的自定義類型使用數量和二進制整數這樣我應該怎麼辦:
type AssocArry IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
我試圖解決從最近1周這個問題,看着沒有結果多個線程。
謝謝。
哪您使用的是Oracle數據庫和Oracle JDBC驅動程序的版本?有關'Oracle 12c JDBC開發人員指南'中關聯數組的章節:https://docs.oracle.com/database/121/JJDBC/oraint.htm#JJDBC28179但Oracle 11。2文檔沒有在任何地方提及它們,可能是數據庫的舊版本和驅動程序根本不支持它們。 – krokodilko