powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как извлечь значение параметра хранимой процедуры по имени?
13 сообщений из 13, страница 1 из 1
Как извлечь значение параметра хранимой процедуры по имени?
    #33221743
Gogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как извлечь значение параметра хранимой процедуры по имени?

БД Oracle 9i r2
Подключаюсь, вызываю процедуру, получаю значения - все великолепно проходит, если использовать индексы.
А при поытке использовать имена вылетает с ошибкой.
// этот код проходит в лет
CallableStatement cs = conn.prepareCall("declare x boolean; begin sp_getName(?,?,x,?); end;");
cs.setDouble(1,id);//io_id
cs.registerOutParameter(1,Types.NUMERIC); // io_id --1
cs.registerOutParameter(2,Types.VARCHAR); // o_name --2
cs.registerOutParameter(3,Types.VARCHAR);// o_result --3
cs.execute();
id = cs.getDouble(1);
name = cs.getString(2);
msg = cs.getString(3);
//
// этот вываливается с ошибкой SQL Error:Не поддерживаемая функция
CallableStatement cs = conn.prepareCall("declare x boolean; begin sp_getName(?,?,x,?); end;");
cs.setDouble(1,id);//io_id
cs.registerOutParameter(1,Types.NUMERIC); // io_id --1
cs.registerOutParameter(2,Types.VARCHAR); // o_name --2
cs.registerOutParameter(3,Types.VARCHAR);// o_result --3
cs.execute();
id = cs.getDouble("io_id"); //SQL Error:Не поддерживаемая функция
name = cs.getString("o_name");
msg = cs.getString("o_result");


??????
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33221924
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может, JDK старое,для получения по имени нужно 1.4 или 1.5
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33221945
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ограничение самого JDBC-драйвера. Причем возможность использовать параметры по имени в простых запросах (select,
insert, update) появилась только в драйвере от Oracle 10g. Указывать по имени параметры процедур Ораклом ИМХО не
реализована ни в одном драйвере.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33222133
Gogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужто и в самом деле все так печально.
Тогда вопрос коллегам.
Как вы решаете эту проблему, чтобы избежать логических ошибок при модификации хранимых процедур.
(количество параметров и их порядок).
Раньше работал делфи + MS SQL там с этим порядок, а к хорошему быстро привыкаешь.
Можно конечно создать двумерный массив имя параметра - номер.
но его тоже нужно поддерживать.
Ваши мнения?
может можно вытащить имя параметров из CallableStatement.getParameterMetaData() ? но как?
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33222285
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так?
должно работать :)
Код: plaintext
1.
CallableStatement cs = conn.prepareCall("declare x boolean; begin sp_getName(io_id => ?,
o_name => ?, some_variable => x, o_result => ?); end;");
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33222655
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это поименная привязка переменных со стороны Оракла. Пследнее время без указания имени параметра я вызываю разве что
процедуры, в которых этих параметров не более одного:) Но со стороны Java по-прежнему параметры приходится указывать по
порядку.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33223774
Gogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timmтак?
должно работать :)
Код: plaintext
1.
CallableStatement cs = conn.prepareCall("declare x boolean; begin sp_getName(io_id => ?,
o_name => ?, some_variable => x, o_result => ?); end;");



нельзя ли подробнее обьяснить эту запись, а именно если в хр. проц. я поменяю параметры местами, то этот код ситуацию обработает корректно ?
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33224030
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gogol Timmтак?
должно работать :)
Код: plaintext
1.
CallableStatement cs = conn.prepareCall("declare x boolean; begin sp_getName(io_id => ?,
o_name => ?, some_variable => x, o_result => ?); end;");



нельзя ли подробнее обьяснить эту запись, а именно если в хр. проц. я поменяю параметры местами, то этот код ситуацию обработает корректно ?
да.
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33225332
Gogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал не проходит.
CallableStatement cs = conn.prepareCall("begin sp_1(io_ID => ?, name => ?); end;");
cs.setDouble("io_ID",test.id);//io_ID --SQL Error:Не поддерживаемая функция

cs.registerOutParameter("io_ID",Types.NUMERIC);//io_ID
cs.registerOutParameter("name",Types.VARCHAR);//name
cs.execute();
test.id = cs.getDouble("io_ID");
test.name = cs.getString("name");
System.out.println(test.name);
cs.close();
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33225579
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GogolПопробовал не проходит.
CallableStatement cs = conn.prepareCall("begin sp_1(io_ID => ?, name => ?); end;");
cs.setDouble("io_ID",test.id);//io_ID --SQL Error:Не поддерживаемая функция

cs.registerOutParameter("io_ID",Types.NUMERIC);//io_ID
cs.registerOutParameter("name",Types.VARCHAR);//name
cs.execute();
test.id = cs.getDouble("io_ID");
test.name = cs.getString("name");
System.out.println(test.name);
cs.close();
Код: plaintext
1.
2.
3.
CallableStatement cs = conn.prepareCall("begin sp_1(io_ID => ?, name => ?); end;");
cs.setDouble( 1 , test.id); -- <<--
//...

Если будешь так писать, то можешь менять порядок формальных параметров в ХП, не изменяя ничего в Java-коде.
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33226095
Gogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь.
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33226209
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел в документации (javadoc из клиентской части Oracle). Можно по имени и в Oracle 9 (у меня там 9.2 с чем-то), с оговорками:
- там у этих методов пояснение "JDBC 3.0", значит , нужна или JDK 1.4 или всякий драйвер сгодится (не проверял).
- работает не для CallfbleStatement, а для OracleCallаbleStatement.
...
Рейтинг: 0 / 0
Как извлечь значение параметра хранимой процедуры по имени?
    #33226216
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CallableStatement - это интерфейс, если ты получаешь его через Connection.prepareCall(), то для Оракла возвратится
именно экземпляр класса OracleCallаbleStatement. Но ИМХО раньше реализации его от Oracle10g параметры по имени не
поддерживаются вообще, да и сейчас с немаловажными оговорками.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как извлечь значение параметра хранимой процедуры по имени?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]