2016-07-20 8 views
0

Ich habe eine Oracle-Funktion, mit der ich einige Daten von Java in die Datenbank aktualisieren kann.Dynamischer Oracle-Typ in Java nicht sichtbar

Die Funktion:

FUNCTION addFunc (
    contact_id    IN NUMBER, 
    contact_distrib_list  IN contact_array 
       ) 
RETURN VARCHAR2; 

Der Array-Typ ist in dem Paket erklärt als

TYPE contact_array IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER; 

Nun Ich versuche, diese Funktion von meinem Java-Code aufzurufen.

ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("contact_array", sqlConnection); 

Aber, wenn ich versuche, das oben genannte zu tun, beklagt sich, dass der Typ nicht erkannt wird.

java.sql.SQLException: ungültige Namensmuster: contact_array

ich alle Möglichkeiten versucht hier einen SQL-Namen zu liefern. Ich habe versucht, das Schema name.package name.array name usw. Aber immer noch der gleiche Fehler.

Ich definiere den Typ falsch in Oracle?

Gibt es eine andere Verbindung mit Java JDBC?

Antwort

0

Wenn Sie eine PL/SQL-Index-by-Tabelle (auch bekannt als assoziatives Array) an eine gespeicherte Prozedur übergeben möchten, müssen Sie Oracle extensions to JDBC verwenden. Sie können ArrayDescriptor nicht mit Index-by-Tabellen verwenden.

Insbesondere müssen Sie die OracleCallableStatement.setPlsqlIndexTable Methode verwenden, zum Beispiel:

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

Ich gehe davon aus, dass der Index-Tabelle von Parameternummer 3 ist und dass data enthält das Array von String s Sie möchte als Inhalt der Tabelle übergeben. Die Nummer 100 ist die Länge der Elemente innerhalb der Sammlung.