![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Girin |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
Добрый день всем. Есть проблема : на сервере Оракл(10g) к которому идет обращение из DAO объекта, существует хранимая процедура, имеющая следующую сигнатуру
При вызове этой процедуры непосредственно из среды БД, например из блока PL/SQL хранимка нормально отрабатывает и возвращает через param2 выходное значение. При использовании CallableStatement вылетает эксепшен
Вызываю следующим образом:
Перепробовал различные варианты типа регистрируемого выходного параметра - не помогает. В чем может быть проблема ? з.ы. Прошу прощения если тема больше относится к разделу Oracle и если я ошибся топиком, но в контексте самой СУБД такой ошибки не возникает |
||||||
|
|||||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 3 Всего: 9 |
Какой JDBC-драйвер вы используете?
И еще, что такое "parameter in out number"? Я не очень шарю в оракле, действительно ли для таких параметров надо делать и сетИнт, и регистерАутПараметер? И третье, что меня смутило - неуказание размера варчара и намбера. Попробуйте их указать, ибо ошибка 06502 чаще всего вызывается проблемами конвертации и присвоения данных. Это сообщение отредактировал(а) MaxPayneC - 27.2.2010, 18:16 |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
MaxPayneC,
IN OUT означает, что параметр передается в хранимую процедуру, модифицируется и возвращается, конструкция легальна. Надо регистрировать дважды, как входной и как выходной. В этом отношении все выглядит правильно. Girin, Меня больше смущает
насколько я себе представляю, компилироваться это не должно, так как одинарными кавычками задаются символьные литералы, а не строковые. Строку надо указывать в двойных кавычках. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Girin |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
jk1, да Вы правы ошибка компиляции имеет место, варировал фактические параметры и при постинге сообщения скопировал с одинарными кавычками случайно набраное значение. MaxPayneC , точную версию драйвера надо уточнить на рабочем компе, помню что использую тот который идет в стандартной поставке с клиентом Oracle 10.2.0(ojdbc14.jar). По поводу размера типов меня тоже посетила мысль, возможно умолчальные значения точности оракловых и jdbc типов различны - спасибо за совет проверю эту версию. |
||||
|
|||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 3 Всего: 9 |
ojdbc14.jar предназначен для JDK 1.4. Если я ошибаюсь насчет длин параметров - попробуйте скачать драйвер под вашу версию оракла и вашу версию ЖДК.
|
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Длина параметра здесь ни при чем.
Во-первых, в CallableStatement просто нет методов для её указания. Во-вторых, мне ни разу не приходилось сталкиваться в необходимостью определять длину параметра для Oracle из Java. Разве что вы в базе задали размер Varchar так, что ваши строки в него не лезут. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 3 Всего: 9 |
Женек, я имел в виду что вероятно, varchar2 имеет максимальную длину 0, или number короткий. Не уверен (
|
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Girin, нашел еще вот такую мысль:
Рекомендуется присваивать значение in out параметру после регистрации, а не до нее, как это сделано у вас в коде. http://www.cyberguru.ru/programming/visual...occi-page3.html -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Girin |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
Да, спасибо почитал еще об этом - данный подход необязателен, но является рекомендацией в стиле good practice. Проблема с ошибкой указанной выше решилась на уровне кода хранимки, где в возвращаемую переменную присваивалось значение большее диапазона указаного при ее определении Столкнулся в контексте этого же топика с другой уже проблемой: После выполнения statement пытаюсь получить возвращаемое значение:
В итоге переменную res возвращается 0. В отладчике у cstmt есть protected поле - parameterInt хранимое как массив, и как я заметил второй элемент этого поля хранит правильное возвращаемое значение, а первое как раз 0. Как можно правильно извлечь реально возращаемое IN OUT значение? |
||||
|
|||||
| Girin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
Извиняюсь, все нормально работает. Причина в самой хранимке. Просьба к модераторам удалить последнее сообщение. Тема решена
Это сообщение отредактировал(а) Girin - 2.3.2010, 17:35 |
|||
|
||||
| DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 3 Всего: 44 |
на мой взгляд решена путем костылизации. рекомендую пользоваться монятными типами и методами для использования конкретной БД, если вы конечно не загоняетесь на тему кроплатформенности использования СУБД, хотя использование хранимки говорит, что не загоняетесь накидал для вас пример, в нем используются IN, OUT и IN OUT параметры, и три самых распространенных в использовании типа данных в оракл. хранимка:
ее вызов:
хоть и не своевременно, но думаю будет полезно Это сообщение отредактировал(а) DimW - 9.3.2010, 16:00 |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |