Как передать список в хранимую процедуру Oracle

У меня есть код, который уже хранит данные String внутри таблицы SQL с помощью хранимой процедуры:

// my DAO
public class SomeProcedure extends StoredProcedure {
    public void process (String data) {
        Map<String, Object> map = new HashMap<String, Object>();
        hm.put("customData", data);
        Map<?,?> result = super.execute(hm);
    }
}

// My pks
procedure storeData (
    data_p in someTable.data%type,
    data_o out someTable.data%type,
)
as
begin
    insert into someTable
...
end storeData;

Мне нужно изменить его, чтобы включить список объектов. Например:

// my DAO
public class SomeProcedure extends StoredProcedure {
    public void process (String data, List<someObject> list) {
        Map<String, Object> map = new HashMap<String, Object>();
        hm.put("customData", data);
        hm.put("customList", list);
        Map<?,?> result = super.execute(hm);
    }
}

Мне непонятно, как поддерживать список объектов в хранимой процедуре.

Есть ли у кого-нибудь опыт передачи и разбора списков объектов для хранения процедур? Может ли кто-нибудь предоставить пример кода того, как это будет выглядеть?


person TERACytE    schedule 09.08.2011    source источник
comment
Что такое OracleStoredProcedureBase?   -  person Matt Ball    schedule 10.08.2011
comment
Я понимаю, если вы застряли с использованием процедур, но не могли бы вы создать и обновить запрос для каждого элемента списка и выполнить их в одной транзакции?   -  person Jeremy    schedule 10.08.2011
comment
OracleStoredProcedureBase — это настраиваемая оболочка вокруг org.springframework.jdbc.object.StoredProcedure.   -  person TERACytE    schedule 10.08.2011
comment
Джереми: Да, я мог бы, и в некоторых случаях делал. В данном случае нет.   -  person TERACytE    schedule 10.08.2011
comment
Используйте [CallableStatement][1], у него есть метод setArray, который вы можете использовать для отправки массива в хранимую процедуру. Таким же образом можно отправлять и другие объекты [1]: download.oracle.com/javase/6/docs/api/java/sql/   -  person Ali    schedule 10.08.2011


Ответы (1)


Я использую такой вызов в своем приложении (сейчас нет доступа к источникам), но он выглядит как http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:712625135727

Я помню одну проблему, связанную с борьбой, было исключение SQL во время выполнения, которое было решено путем добавления orai18n.jar в путь к классам рядом с ojdbc14 (для oracle 10g и передачи списка строк)

person alef    schedule 09.08.2011