|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Обнаружилась проблема с перекомпиляцией пакета при некотором сочетании вложенных функций. Firebird 4 текущий снапшот (на предыдущих было так же), IBExpert 2021.3.29.1 Удалось сделать простой пример, воспроизводится всегда. Пакет: Код: sql 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. 56.
Первая компиляция в редакторе пакетов происходит успешно, при повторной перекомпиляции пакета происходит ошибка, приводящая к закрытию соединения с БД: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
После этого соединение с БД закрывается, и нет возможности сохранить пакет, при перекомпиляции которого произошла ошибка. В Script Executive пакет можно пересоздавать множество раз, ошибки не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2021, 00:26 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
L_VVПервая компиляция в редакторе пакетов происходит успешно, при повторной перекомпиляции пакета происходит ошибка, приводящая к закрытию соединения с БД: а вот это уже не похоже на ошибку Эксперта. Если Firebird рвёт соединение на своей стороне, значит там что-то нехорошее произошло. Смущает использование numeric без указания точности/масштаба. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2021, 12:45 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Насчёт numeric - там были 'type of column usr.id' и т.п., ошибка была та же. Просто заменил для упрощения примера. Должно и так работать. А вот почему рвётся соединение на повторной компиляции именно в редакторе пакетов IBExpert, непонятно. Если прогоняешь этот скрипт в окне Script Executive в эксперте, или просто через isql, то можно множество раз его выполнять, ошибки нет. Кстати, в некоторых случаях после переконнекта после ошибки, тело пакета оказывается пустым. Закономерности не нашёл, но, кажется, это иногда происходит, если после ошибки не закрывать эксперт полностью, а только переподключиться к БД и продолжить работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2021, 13:01 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Ну я тут вины эксперта не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 08:30 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Но ошибка возникает только в редакторе пакетов IBExpert. И в редакторе скриптов IBExpert, и в isql ошибка не появляется, а в редакторе пакетов в 100% случаев на повторной компиляции падает. Может под дебаггером в коде эксперта будет что-то понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 08:47 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Там после коммита транзакции соединение рвется. Больше ничего не видно. Ну и тот факт, что при замене проблемного куска кода на другой все нормально, как бы намекает, что дело не в эксперте. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 09:17 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
В редакторе скриптов у меня тоже воспроизводится. И в SQL-редакторе воспроизводится. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 09:29 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Сейчас в редакторе скриптов у меня тоже воспроизвелось. Странно, почему раньше в нём не падало. И в isql тоже на второй компиляции в этом же соединении падает. В прошлый раз я, оказывается, в разных подключениях проверял. Перенесу тогда этот тест в основной форум со ссылкой на эту тему, видимо, надо в самом FB смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 09:40 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
L_VV, Соединение так же обрывается в пакете, если во вложенной процедуре/функции пакета происходит исключение и обрабатывается через WHEN <error> DO … Но обрыв соединения происходит уже при запуске процедуры/функции. Приходится то же самое делать в вызывающей процедуре пакета: повторять блок WHEN <error> DO … Не раз на такое натыкался. Видимо, это какая-то недоделка в Firebird насчёт вызовов собственных для пакета процедур/функций ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 10:01 |
|
Ошибка при перекомпиляции пакета с вложенными функциями
|
|||
---|---|---|---|
#18+
Ссылка на обсуждение в форуме "Firebird, Interbase": https://www.sql.ru/forum/1335975/oshibka-pri-perekompilyacii-paketa-s-vlozhennymi-funkciyami ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 10:41 |
|
|
start [/forum/topic.php?fid=42&msg=40069085&tid=1598494]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 429ms |
0 / 0 |