|
|
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Народ подскажите пожалуйста почему возникает ошибка: пишу код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Теперь я хочу строку Код: plaintext Код: plaintext Код: plaintext Код: plaintext соттветственно код преобразуется в Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Exeption e= [IBM][CLI Driver] SQL0418N Оператор содержит неверное использование маркера параметра. SQLSTATE=42610 Не могу понять почему? да GETCOUNT_USER - это пользовательская функция или параметры в функцию нельзя заполнять через знак (?) подскажите пожалуйста где можно о таких тонкостях прочитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:04:49 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Уважаемый господин, какая у Вас СУБД? IBM DB2 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:33:57 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
GETCOUNT_USER(?,table,?) - хранимая процедура ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:35:10 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Хранимую процедуру СУБД нельзя вызывать через механизм PreparedStatement. Нужно использовать механизм CalledStatement для вызова хранимых процедур. Причем передача параметров и возвращение результатов могут быть разными в зависимости от СУБД (на Oracle и IBM DB2) отличаются. Решение: Создайте еще одну хранимую процедуру и поместите Ваш запрос, который вызывает GETCOUNT_USER(?,table,?), а затем вызывайте новую хранимую процедуру через CalledStatement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:39:31 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
GETCOUNT_USER(?,table,?) - это пользовательская функция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:53:58 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Изя ШниперсонХранимую процедуру СУБД нельзя вызывать через механизм PreparedStatement. Нужно использовать механизм CalledStatement для вызова хранимых процедур. Причем передача параметров и возвращение результатов могут быть разными в зависимости от СУБД (на Oracle и IBM DB2) отличаются. Решение: Создайте еще одну хранимую процедуру и поместите Ваш запрос, который вызывает GETCOUNT_USER(?,table,?), а затем вызывайте новую хранимую процедуру через CalledStatement. Спасибо! попробую так сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:56:46 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
ghleepGETCOUNT_USER(?,table,?) - это пользовательская функция Пользовательские функции вызывать из PreparedStatement можно, но здесь, видимо, зависит от конкретного JDBC-драйвера. Для MSSQL2K/MSSQL2K5 я такие вызовы использую, через jtds-1.2. Для Oracle 9 тоже работало. Так что Вам можно попробовать еще посмотреть более новые версии "родных" драйверов для DB2 или третьесторонние продукты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 13:23:37 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Дело не в драйвере, а в том что процедуру нельзя использовать в селекте. Функцию - можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 13:34:30 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
TimmДело не в драйвере, а в том что процедуру нельзя использовать в селекте. Функцию - можно. Тут - именно функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 14:09:36 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
извините, а в значении param_nickname апострофы не забыли? т.е. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 14:14:40 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
TimmДело не в драйвере, а в том что процедуру нельзя использовать в селекте. Функцию - можно. З.Ы. Не всегда так. Яркий пример - Firebird, который замечательно поддерживает использование процедур в селектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 14:18:11 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Michael Ponomarevизвините, а в значении param_nickname апострофы не забыли? т.е. Код: plaintext Конечно я вас извиняю но если вы повнимательней посмотрите то может все таки правильно написано ghleep Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 15:48:52 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Michael Ponomarevизвините, а в значении param_nickname апострофы не забыли? т.е. Код: plaintext Виноват, ступил, не нужны никакие апострофы. Sorry ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 15:49:15 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Зашедший TimmДело не в драйвере, а в том что процедуру нельзя использовать в селекте. Функцию - можно. З.Ы. Не всегда так. Яркий пример - Firebird, который замечательно поддерживает использование процедур в селектах. А то что в Firebird'e все ХП зовуцца процедурами - ниче? другое дело, что в нем процедура (create procedure) может возвращать значение (не аут параметром, а именно как функция в общем смысле). Поэтому Firebird не яркий пример, а нехороший. Терминологию путает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 15:59:08 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
А ка применить ваши советы Изя Шниперсон Хранимую процедуру СУБД нельзя вызывать через механизм PreparedStatement. Нужно использовать механизм CalledStatement для вызова хранимых процедур. Решение: Создайте еще одну хранимую процедуру и поместите Ваш запрос, который вызывает GETCOUNT_USER(?,table,?), а затем вызывайте новую хранимую процедуру через CalledStatement. в случае если например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. т. е если динамически формировать sql запрос, как быть тогда? как вместо ("+table+") использовать (?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:10:30 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Timm Зашедший TimmДело не в драйвере, а в том что процедуру нельзя использовать в селекте. Функцию - можно. З.Ы. Не всегда так. Яркий пример - Firebird, который замечательно поддерживает использование процедур в селектах. А то что в Firebird'e все ХП зовуцца процедурами - ниче? другое дело, что в нем процедура (create procedure) может возвращать значение (не аут параметром, а именно как функция в общем смысле). Поэтому Firebird не яркий пример, а нехороший. Терминологию путает. В общем-то по сути ты прав (если считать, что функция - то, что возвращает), но формально высказывание было неточно. К тому же кроме Файра есть еще Информикс, в котором до девятки (если память не изменяет) поддерживалось такое же поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:38:26 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
Странная задача какая-то. Мне показалось что у вас в базе много разных таблиц с одинаковыми полями и разными названиями. Я бы посоветовал для каждой таблицы отдельную хранимую процедуру делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:39:13 |
|
||
|
PreparedStatement - Вопрос знатокам
|
|||
|---|---|---|---|
|
#18+
ghleepА ка применить ваши советы Изя Шниперсон Хранимую процедуру СУБД нельзя вызывать через механизм PreparedStatement. Нужно использовать механизм CalledStatement для вызова хранимых процедур. Решение: Создайте еще одну хранимую процедуру и поместите Ваш запрос, который вызывает GETCOUNT_USER(?,table,?), а затем вызывайте новую хранимую процедуру через CalledStatement. в случае если например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. т. е если динамически формировать sql запрос, как быть тогда? как вместо ("+table+") использовать (?) У Вас пользовательская функция, а не хранимая процедура, так что сначала стоит попробовать найти поддерживающий этот функционал JDBC-драйвер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 17:48:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34316379&tid=2146695]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
99ms |
get tp. blocked users: |
2ms |
| others: | 283ms |
| total: | 499ms |

| 0 / 0 |
