|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Нужно выбрать данные из нескольких баз. Решил использовать Dynamic SQL в хранимой процедуре. D Столкнулся с следующей проблемой, часть кода ХП Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 09:56 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Fet Frumos, Во-первых, поставить в трейс i_val, чтоб убедиться , что оно разное. Во-вторых, не видно, где вы в цикле меняете alias, то есть вызываете одну и ту же процедуру. В-третьих, поставить в трейс alias, и показать процедуру myspl для каждого alias. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 10:56 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
автор Во-первых, поставить в трейс i_val, чтоб убедиться , что оно разное. Во-вторых, не видно, где вы в цикле меняете alias, то есть вызываете одну и ту же процедуру. В-третьих, поставить в трейс alias, и показать процедуру myspl для каждого alias. 1. i_val трейсил оно разное ставил TRACE после Код: plaintext
2,3 alias передаю как входной параметр в процедуру, на время отладки использую один алиас прописанный в переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 11:16 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Fet Frumos, лучше бы полный "работоспособный" текст для теста привёл.... Штатный dynamic sql в informix ещё новый - вряд ли кто-то активно польз[уется/овался]. "Всё приходится делать самому..." :) Привожу пример для остальных, на котором ощутимо видна проблема. По крайне мере у меня на 11.50FC6TL. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 16:10 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
На нижеприведённом варианте ХП для того же теста видно что собака где-то с переподготовкой cur2. Вполне может быть багом - или вскоре оказаться "недооформленной фичей" :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 16:14 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
С одной стороны: RTFM Resources allocated to the prepared statement can be released later using the FREE statement. С другой: RTFMA statement identifier can represent only one SQL statement or (in ESQL/C) one semicolon-separated list of SQL statements at a time . A new PREPARE statement can specify an existing statement identifier if you want to bind the identifier to a different SQL statement text. Т.е. исходя из доки тестовый пример выглядит корректным. Похоже на баг. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 16:19 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
ОФФ: 1313 сообщений. Жду бана :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 16:20 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
АнатоЛойОФФ: 1313 сообщений. Жду бана :) И подсказывают, что в ветке Informix с утра было 666 сообщений :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 16:26 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
АнатоЛойОФФ: 1313 сообщений. Жду бана :) Ну, этим сообщением ты всю магию цифр и сломал (уже стало 1314). Но если есть большое желание могу профилактический бан выдать на денек - просто никого раньше не банил, аж руки чешутся :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 16:29 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Fet FrumosНужно выбрать данные из нескольких баз. Решил использовать Dynamic SQL в хранимой процедуре. D Столкнулся с следующей проблемой, часть кода ХП Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Надо модифицировать процедуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 17:00 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Ikir Надо модифицировать процедуру: ... Код: plaintext 1. 2. 3.
Если бы не переменная "alias||", присутствующая перед именем ХП, было бы совсем хорошо... Но есть подозрение, что alias либо префикс, изменяющий собственно имя ХП, которую вызываем, либо ещё веселее - имя другой БД [а то и сервера]. А по тесту видно, что смена строки с выражением не приводит к "перекомпиляции" запроса. Итого: если alias - это параметр тестируемой ХП, то должно заработать, а если alias меняется внутри ХП (есть внешний цикл - скорее всего не заработает)... ТС, ау?! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 17:41 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Большое спасибо, вариант предложенный Ikir работает . Алиас - имя другой базы, пока что на одном сервере(на время тестов), а так планирую на разных. Алиас передается в ХП входным параметром. О результате экспериментов напишу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2010, 18:10 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
может быть, поможет. :-) ... statement text that [SQL statement for Dynamic Cursor in an SPL Routine] specifies can include question mark (? ) symbols as placeholders for values that the user supplies at runtime, but these placeholders in the PREPARE statement can represent only data values, not SQL identifiers. (c) http://publibfp.dhe.ibm.com/epubs/pdf/c2377515.pdf Насколько я понимаю, эта проблема была с данными, название сервера или имя хранимки ("alias") - это идентификтор. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2010, 11:45 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Лена Владыкина, не совсем так. К "знаку вопроса" пришли позже: как к обходному решению выявленной проблемы. А выявленная проблема звучит так: "Несмотря на возможность (декларированную в документации) повторно использовать одну и ту же переменную внутри ХП для выполнения разных SQL-утверждений, в действительности смена в цикле SQL утверждения не приводит к реальному выполнению разных SQL-утверждений, а выполняется всё время то, которое было подготовлено первым. К счастью, механизм параметров оказался работающим - что и устроило топик-стартера". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2010, 22:24 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
АнатоЛой, я понимаю, что ты имеешь ввиду... Но вопрос, мне кажется, в другом.. Дело в том, что в документации написано только то, что переменная для SQL выражения должна быть типа character. А можно ли ее формировать приведением типов или нет, видимо, решается самостоятельно, исходя из богатого опыта формирования значений таких переменных. И это, по-моему, вполне нормально. На самом же деле, немного ниже того места, что ты цитировал из документации, есть целый список условий по формированию текста SQL выражения, включая это: In some statements, parameters are unknown when the statement is prepared because a different value can be inserted each time the statement is executed. In these statements, you can use a question-mark ( ? ) placeholder where a parameter must be supplied when the statement is executed. Собственно, вопрос тогда вот в чем.. Насколько это этично, давать программистам возможность пользоваться динамическим SQL, но при этом предполагать возможность, что они будут спотыкаться? Как по мне, ну и ничего особо страшного в этом нет:-) p.s. Толик, уточняю на всякий случай, что я остаюсь преданной поклоннице всех твоих талантов, с которыми знакома:-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 18:50 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Лена ВладыкинаА можно ли ее формировать приведением типов или нет, видимо, решается самостоятельно, исходя из богатого опыта формирования значений таких переменных. ... Именно с формированием строки никаких проблем и не возникало... Ещё раз обращаю внимание на упомянутую цитату: RTFMA new PREPARE statement can specify an existing statement identifier if you want to bind the identifier to a different SQL statement text. Теперь я выделил только одно слово, хотя важным является всё предложение. Fet Frumos (не перевелись богатыри в земле русской, пусть даже и болгарские! :) ), как раз и попробовал на разных итерациях цикла с помощью повторного PREPARE связывать (bind) один и тот же идентификатор (identifier: "tmp") с разными SQL утверждениями в строке "sql" (different SQL statement text). Тяжело предположить, что "new" из документации предполагает только несколько утверждений PREPARE, и не предполагает использование одного и того же утверждения с PREPARE на разных итерациях цикла . Лена Владыкина ...you can use a question-mark ( ? ) placeholder where a parameter must be supplied when the statement is executed. "can use" - не "must use"... Лена Владыкина Насколько это этично, давать программистам возможность пользоваться динамическим SQL, но при этом предполагать возможность, что они будут спотыкаться? Как по мне, ну и ничего особо страшного в этом нет:-) Никто и не спорит, фича новая, разработчик же должен был споткнуться :) Чуть-чуть обидно, что это оказался не разработчик из IBM :). Лена Владыкина p.s. Толик, .... я остаюсь ... поклонницей ... :-))) Блин, где здесь кнопка с красными щёчками?! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 09:56 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Вообще-то, персонажа румынских народных сказок Фет Фрумоса можно назвать молдаванином. С натяжкой даже украинцем (есть на Буковине и украинские сказки о нем). Ну никак не болгарин :). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 15:22 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Daugava и Fet Frumos, я каюсь за столь раннее обретение склероза . Я, правда, в районе обеда даже вспомнил про эту разницу - но мини-командировка по Киеву не дала мне вовремя извиниться. В общем, оговорка получилась прям по фильму: к/ф Брат- Киркоров мне не нравится - весь слащавый, напудренный как баба, одним словом - румын. - Так ведь он же болгарин! - Да?! А какая разница? .. П.С.: Съездить на майские праздники в Европу и посмотреть в чём разнмица, что-ли?! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 17:36 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Был в отпуске. Дальнейший результат экспериментов неутешителен, на одном сервере ХП работает, а если ХП запускаю на одном сервере, а обращаюсь к базе расположенной на другом то процедура вываливается с ошибкой "-9791 SQL error: User Defined Routine (importdb_t2) execution failed." :(. Видимо придется отказаться от использования в моей задаче Dynamic SQL . ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2010, 14:59 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Кстати, Fet Frumos - древнеукраиский богатырь (согласно исследований украинских историков) . ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2010, 15:04 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Дополнение: ошибка появляется как раза при выполнении "проблемного участка" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
если его закоментить то работает ок ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2010, 15:29 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Fet FrumosДополнение: ошибка появляется как раза при выполнении "проблемного участка" ... если его закоментить то работает ок весь отображённый участок - проблемный? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2010, 16:51 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
ОФ: Fet FrumosКстати, Fet Frumos - древнеукраиский богатырь (согласно исследований украинских историков) . Он же - молдавский :). Старые добрые сказки... Шварц - богатырь предыдущего поколения, и Фредди - его ужас :) (хотя похоже, и нынешнему достанется :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2010, 16:55 |
|
Dynamic SQL, проблема с курсором
|
|||
---|---|---|---|
#18+
Ошибка вываливается при вызове ХП с параметром. Получаю ошибки Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2010, 10:56 |
|
|
start [/forum/topic.php?fid=44&fpage=23&tid=1607582]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
123ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 311ms |
total: | 537ms |
0 / 0 |