に連想配列を返すために、私はJavaへの連想配列を返すようにしようとしますが、例外に直面しています。私は、独自の永続化層を使用していますので、私は私のコードを投稿することができませんが、Googleで検索しながら、私は私が持っているものとまったく似て何かを発見した: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ドライバのバージョンを使用していますか?ここで 'オラクル12cはJDBC開発者guide'で連想配列についての章があります:https://docs.oracle.com/database/121/JJDBC/oraint.htm#JJDBC28179が、Oracle 11。2ドキュメントにはどこにも言及されていませんが、古いバージョンのデータベースであってもドライバは単にそれらをサポートしていない可能性があります。 – krokodilko