powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при перекомпиляции пакета с вложенными функциями
10 сообщений из 10, страница 1 из 1
Ошибка при перекомпиляции пакета с вложенными функциями
    #40068837
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обнаружилась проблема с перекомпиляцией пакета при некотором сочетании вложенных функций.
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.
SET TERM ^ ;

CREATE OR ALTER PACKAGE USR_PKG_TEST
AS
begin
  function get_usr_name()
   returns varchar(30);

  function get_usr_id()
   returns numeric;

  procedure create_usr(p_user_name varchar(30))
    returns (p_id numeric);

end^

RECREATE PACKAGE BODY USR_PKG_TEST
AS
begin
  function get_usr_name()
   returns varchar(30)
  as
  begin
    return 'TEST_USER';
  end

  function get_usr_id()
   returns numeric
  as
    declare variable v_sess_usr_name varchar(30);
  begin
    v_sess_usr_name = get_usr_name(); -- Здесь хоть с именем пакета, хоть без имени пакета,
                                      -- ошибки при перекомпиляции в редакторе пакетов нет
    -- ...

    return 123;

  end

  procedure create_usr(p_user_name varchar(30))
    returns (p_id numeric)
  as
    declare variable v_sess_usr_id numeric;
  begin
    v_sess_usr_id = USR_PKG_TEST.get_usr_id(); -- Если здесь имя данного пакета, или функция вызывается без имени пакета,
                                               -- то на второй перекомпиляции пакета в редакторе пакетов происходит ошибка,
                                               -- приводящая к закрытию соединения с БД.
                                               -- Если здесь имя другого пакета с такой же функцией (например, просто копия этого пакета),
                                               -- то пакет можно перекомпилировать много раз, ошибки при перекомпиляции нет
    -- ...
  end

end
^

SET TERM ; ^



Первая компиляция в редакторе пакетов происходит успешно,
при повторной перекомпиляции пакета происходит ошибка, приводящая к закрытию соединения с БД:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Error Message:
----------------------------------------
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Error reading data from the connection.
-------------------------------------------------------------------------------------------------------------
SQLCODE: -902
SQLSTATE: 08006
GDSCODE: 335544726
Connection will be closed immediately.

[0054827B] FIB.IBError (Line 588, "FIB.pas" + 82) + $2
[00545771] FIBDatabase.TFIBTransaction.StartTransaction (Line 2953, "FIBDatabase.pas" + 62) + $C
[0110FA82] IBEDatabases.TIBEDatabase.GetMaxRdbFormat (Line 9599, "IBEDatabases.pas" + 14) + $5
[00FF72D9] Main.UpdateMaxRdbFormat (Line 5919, "Main.pas" + 4) + $B
[00EF146C] CompileForm.ExecuteSequence (Line 458, "CompileForm.pas" + 80) + $0
[00E5AEB8] PackageEditorF.TPackageEditorForm.Compile (Line 495, "PackageEditorF.pas" + 121) + $26



После этого соединение с БД закрывается, и нет возможности сохранить пакет, при перекомпиляции которого произошла ошибка.

В Script Executive пакет можно пересоздавать множество раз, ошибки не происходит.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069085
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_VVПервая компиляция в редакторе пакетов происходит успешно,
при повторной перекомпиляции пакета происходит ошибка, приводящая к закрытию соединения с БД:

а вот это уже не похоже на ошибку Эксперта. Если Firebird рвёт соединение на своей стороне, значит там что-то нехорошее произошло.

Смущает использование numeric без указания точности/масштаба.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069089
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчёт numeric - там были 'type of column usr.id' и т.п., ошибка была та же.
Просто заменил для упрощения примера. Должно и так работать.

А вот почему рвётся соединение на повторной компиляции именно в редакторе пакетов IBExpert, непонятно.
Если прогоняешь этот скрипт в окне Script Executive в эксперте, или просто через isql, то можно множество раз его выполнять, ошибки нет.

Кстати, в некоторых случаях после переконнекта после ошибки, тело пакета оказывается пустым. Закономерности не нашёл, но, кажется, это иногда происходит, если после ошибки не закрывать эксперт полностью, а только переподключиться к БД и продолжить работать.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069129
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я тут вины эксперта не вижу.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069133
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но ошибка возникает только в редакторе пакетов IBExpert.

И в редакторе скриптов IBExpert, и в isql ошибка не появляется, а в редакторе пакетов в 100% случаев на повторной компиляции падает.

Может под дебаггером в коде эксперта будет что-то понятнее?
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069136
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там после коммита транзакции соединение рвется. Больше ничего не видно.

Ну и тот факт, что при замене проблемного куска кода на другой все нормально, как бы намекает, что дело не в эксперте.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069139
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В редакторе скриптов у меня тоже воспроизводится.
И в SQL-редакторе воспроизводится.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069140
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас в редакторе скриптов у меня тоже воспроизвелось.
Странно, почему раньше в нём не падало.

И в isql тоже на второй компиляции в этом же соединении падает.
В прошлый раз я, оказывается, в разных подключениях проверял.

Перенесу тогда этот тест в основной форум со ссылкой на эту тему, видимо, надо в самом FB смотреть.
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069144
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_VV,

Соединение так же обрывается в пакете, если во вложенной процедуре/функции пакета происходит исключение и обрабатывается через WHEN <error> DO …
Но обрыв соединения происходит уже при запуске процедуры/функции.
Приходится то же самое делать в вызывающей процедуре пакета: повторять блок WHEN <error> DO …
Не раз на такое натыкался. Видимо, это какая-то недоделка в Firebird насчёт вызовов собственных для пакета процедур/функций
...
Рейтинг: 0 / 0
Ошибка при перекомпиляции пакета с вложенными функциями
    #40069147
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ссылка на обсуждение в форуме "Firebird, Interbase":
https://www.sql.ru/forum/1335975/oshibka-pri-perekompilyacii-paketa-s-vlozhennymi-funkciyami
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при перекомпиляции пакета с вложенными функциями
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]