2016-07-20 10 views
0

Javaからデータベースにデータを更新するために使用するoracle関数があります。JavaでダイナミックなOracleタイプが表示されない

機能:

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方法を使用する必要があります:私は、索引付き表には、パラメータの数3であることを仮定してい

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

をし、それがdataStringの配列が含まれていますテーブルの内容として渡したい。数字100は、コレクション内の要素の長さです。

関連する問題