Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов pl/sql процедуры из Java 
:(
    Опции темы
0x00
  Дата 4.8.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Добрый день!)

Возникла необходимость вызвать процедуру pl/sql (Oracle) из кода Java.
С вызовом процедур, у которых in/out параметры - простые типы - проблем не возникает.

В моем-же случае необходимо вызвать процедуру с собственными типами, примерно так:

Код


procedure fill_sb(vInTable in SB_TABLE, vResult out SB_RESULT_TABLE);

CREATE OR REPLACE TYPE SB_ROW AS OBJECT (
  id number(13),
  the_code varchar2(500)
);

CREATE OR REPLACE TYPE SB_TABLE AS TABLE OF SB_ROW;



вопросов по получению и разбору выходного (out) параметра нету (уже разобрался), возникает вопрос как заполнить и передать массив данных для обработки в процедуру.
делаю примерно так.

Код

                ARRAY vInTable; // вот тут вопрос - "КАК ЗАПОЛНИТЬ?"

                String SQL = "{ call package_name.fill_sb(?, ?)@"+unit.getUnitTns()+" }";
                CallableStatement cs = (CallableStatement)connection.prepareCall(SQL);
                cs.setArray(1, vInTable);
                cs.registerOutParameter(2, OracleTypes.ARRAY, "SB_RESULT_TABLE");


Если есть у когонибудь опыт передачи собственных типов (табличных) в процедуру, прошу помочь словом или куском кода))

Это сообщение отредактировал(а) 0x00 - 4.8.2011, 10:32
PM MAIL   Вверх
jk1
Дата 4.8.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 5
Всего: 75



Вот так мы как-то раз передавали массив строк в хранимку Oracle

Код

    public CallableStatement prepareStatement(Connection conn) throws SQLException {
        ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("DATAROW", conn);
        // собираем нужный нам массив
        ArrayList<byte[]> wrapper = new ArrayList<byte[]>();
        for (String aData : data) {
            wrapper.add(aData.getBytes(Charset.forName("UTF-8")));
        }
        // и, наконец, пакуем все в запрос
        OracleCallableStatement statement = (OracleCallableStatement) conn.prepareCall(
                DBUtilities.getInstance().wrapDBCall("PostRequestDataRow(?,?,?, ?,?)"));
        statement.setInt(1, job.getJobId());
        statement.setDate(2, job.getDate());
        statement.setARRAY(3, new ARRAY(arrayDesc, conn, wrapper.toArray()));
        // игнорируем выходные параметры
        statement.registerOutParameter(4, OracleTypes.INTEGER);
        statement.registerOutParameter(5, OracleTypes.VARCHAR);
        
        return statement;
    }
 
Код

    public String wrapDBCall(String sql) {
        return "{call " + Constants.DB_PACKAGE_NAME + '.' + sql + '}';
    }



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.