2016-07-20 2 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 и т. Д. Но все та же ошибка.

Я неправильно определяю тип в оракуле?

Есть ли другой способ подключения с использованием 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 s вы хотите передать содержимое таблицы. Число 100 - это длина элементов в коллекции.

Смежные вопросы