|
|
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Как извлечь значение параметра хранимой процедуры по имени? БД 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"); ?????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 19:01 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
может, JDK старое,для получения по имени нужно 1.4 или 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 21:44 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Это ограничение самого JDBC-драйвера. Причем возможность использовать параметры по имени в простых запросах (select, insert, update) появилась только в драйвере от Oracle 10g. Указывать по имени параметры процедур Ораклом ИМХО не реализована ни в одном драйвере. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 22:25 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Неужто и в самом деле все так печально. Тогда вопрос коллегам. Как вы решаете эту проблему, чтобы избежать логических ошибок при модификации хранимых процедур. (количество параметров и их порядок). Раньше работал делфи + MS SQL там с этим порядок, а к хорошему быстро привыкаешь. Можно конечно создать двумерный массив имя параметра - номер. но его тоже нужно поддерживать. Ваши мнения? может можно вытащить имя параметров из CallableStatement.getParameterMetaData() ? но как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 09:00 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
так? должно работать :) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 10:15 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Это поименная привязка переменных со стороны Оракла. Пследнее время без указания имени параметра я вызываю разве что процедуры, в которых этих параметров не более одного:) Но со стороны Java по-прежнему параметры приходится указывать по порядку. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 12:00 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Timmтак? должно работать :) Код: plaintext 1. нельзя ли подробнее обьяснить эту запись, а именно если в хр. проц. я поменяю параметры местами, то этот код ситуацию обработает корректно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 17:22 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Gogol Timmтак? должно работать :) Код: plaintext 1. нельзя ли подробнее обьяснить эту запись, а именно если в хр. проц. я поменяю параметры местами, то этот код ситуацию обработает корректно ? да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 19:27 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Попробовал не проходит. 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(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 14:04 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
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. Если будешь так писать, то можешь менять порядок формальных параметров в ХП, не изменяя ничего в Java-коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:17 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 18:20 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
Посмотрел в документации (javadoc из клиентской части Oracle). Можно по имени и в Oracle 9 (у меня там 9.2 с чем-то), с оговорками: - там у этих методов пояснение "JDBC 3.0", значит , нужна или JDK 1.4 или всякий драйвер сгодится (не проверял). - работает не для CallfbleStatement, а для OracleCallаbleStatement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 20:08 |
|
||
|
Как извлечь значение параметра хранимой процедуры по имени?
|
|||
|---|---|---|---|
|
#18+
CallableStatement - это интерфейс, если ты получаешь его через Connection.prepareCall(), то для Оракла возвратится именно экземпляр класса OracleCallаbleStatement. Но ИМХО раньше реализации его от Oracle10g параметры по имени не поддерживаются вообще, да и сейчас с немаловажными оговорками. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 20:17 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=787&tid=2151676]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 388ms |

| 0 / 0 |
