powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пустое вычисляемое поле
3 сообщений из 3, страница 1 из 1
Пустое вычисляемое поле
    #39970773
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB 3.0.5.33220. Предыстория. Уже давно уже выдача сообщения при удалении выдает пустой текст для вычисляемого поля. Сегодня занялся этим вопросом. В итоге проблема воспроизводится, но только на боевой таблице. На аналогичной не воспроизводится.

Исходные данные:
Таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE REG$ABONENT$EQUIPMEN2 (
    ID     D_KEY NOT NULL,
    ABOUT  COMPUTED BY ('My ID is ' || ID),
    NAME   COMPUTED BY ((SELECT FIRST 1 'NAME' FROM DIR$EQUIPMENT$KIND))
);

ALTER TABLE REG$ABONENT$EQUIPMEN2 ADD CONSTRAINT PK_REG$ABONENT$EQUIPMEN2 PRIMARY KEY (ID);

SET TERM ^ ;

CREATE OR ALTER TRIGGER REG$ABONENT$EQUIPMEN2_BU0 FOR REG$ABONENT$EQUIPMEN2
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
    EXECUTE PROCEDURE PKG$EXCEPTION.FOR_EQUIPMENT(NEW.ID, 'update');
END^

SET TERM ; ^


В ней одна строка.

В PKG$EXCEPTION процедура
Код: sql
1.
2.
3.
4.
5.
    PROCEDURE FOR_EQUIPMENT(ID_EQUIPMENT DOM$KEY NOT NULL, TEXT DOM$TEXT_EXCEPTION NOT NULL)
    AS
    BEGIN
        EXCEPTION EXC$ERROR COALESCE((SELECT ABOUT FROM REG$ABONENT$EQUIPMEN2 WHERE ID = :ID_EQUIPMENT), '<Название пусто> (ID = ' || :ID_EQUIPMENT || ')') || '.' || :TEXT || '.';
    END



Делаю обновление таблицы (можно удаление, то же самое):
Код: sql
1.
UPDATE REG$ABONENT$EQUIPMEN2 SET ID = ID


Код: plaintext
1.
2.
3.
EXC$ERROR.
<Название пусто> (ID = 500).update.
At procedure 'PKG$EXCEPTION.FOR_EQUIPMENT' line: 20, col: 9
At trigger 'REG$ABONENT$EQUIPMEN2_BU0' line: 5, col: 5.

После перекомпиляции PKG$EXCEPTION получается вот так:
Код: plaintext
1.
2.
3.
4.
EXC$ERROR.
My ID is 500.update.
At procedure 'PKG$EXCEPTION.FOR_EQUIPMENT' line: 20, col: 9
At trigger 'REG$ABONENT$EQUIPMEN2_BU0' line: 5, col: 5.

Если удалить поле NAME из таблицы или закомментировать использование DIR$EQUIPMENT$KIND, то текст получается правильный: My ID is 500.update.
Сделал второй пакет PKG$EXCEP и стал вызывать исключение из него. Проблема не воспроизводится.
Если вместо вычисляемого поля взять реальное, то проблема так же не воспроизводится.

Насколько я понял в итоге, всё дело в каких-то дальних зависимостях, но как их определить - не представляю. Если покажете, что еще покопать - буду признателен.
...
Рейтинг: 0 / 0
Пустое вычисляемое поле
    #39973572
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, отправил вам на почту воспроизводимый тест-кейс.
...
Рейтинг: 0 / 0
Пустое вычисляемое поле
    #39975474
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

http://tracker.firebirdsql.org/browse/CORE-6351

пока ещё не исправил, но главное что проблему выяснил.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пустое вычисляемое поле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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