Проблемы с обновляемым через триггеры представлением.

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Maxemius
Сообщения: 2
Зарегистрирован: 22 сен 2005, 23:03

Проблемы с обновляемым через триггеры представлением.

Сообщение Maxemius » 22 сен 2005, 23:30

Добрый день, коллеги :-)

Получился странный баг в триггерах представления Before Insert и Before Update.

Сервер: FireBird 1.52

Таблица:
CREATE TABLE TBL_OBJECTS (
ID DMN_ID NOT NULL /* DMN_ID = INTEGER NOT NULL */,
NAME DMN_STR_127 /* DMN_STR_127 = VARCHAR(127) */,
TAG DMN_INT /* DMN_INT = INTEGER */,
DATE_ DMN_TS_NOW /* DMN_TS_NOW = TIMESTAMP DEFAULT 'NOW' */,
DESCRIPTION DMN_STR_255 /* DMN_STR_255 = VARCHAR(255) */,
HEAD_ID DMN_INT /* DMN_INT = INTEGER */
);

Представление на эту таблицу:
CREATE VIEW VW_TUNITS(
ID,
NAME,
DESCRIPTION)
AS
Select TBL.ID , TBL.NAME Name , TBL.DESCRIPTION Description From TBL_OBJECTS TBL Where TBL.HEAD_ID = 7 ;

Триггер представления на вставку:
Create Trigger TRG_TUNITS_BI for VW_TUNITS
BEFORE INSERT AS Begin
Insert Into TBL_OBJECTS
(ID, HEAD_ID,NAME,DESCRIPTION)
Values (New.ID, 7,New.NAME,New.DESCRIPTION); End

Вроде всё элементарно, но при попытке вставки записи с любыми данными в поле NAME или DESCRIPTION выдаёт:
"Overflow occurred during data type conversion.
conversion error from string "aoeuaoeuaoeu"."

С модифицирующим триггером та же беда. Удаляющий работает нормально. Если убираю поле Name из представления и триггеров, тоже всё нормально проходит.

Странный прикол :(

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 23 сен 2005, 09:12

а если вот так:

Код: Выделить всё

CREATE VIEW VW_TUNITS(
ID,
NAME,
DESCRIPTION)
AS
Select TBL.ID, TBL.NAME Name, TBL.DESCRIPTION Description
From TBL_OBJECTS TBL Join RDB$DATABASE On 1=1
Where TBL.HEAD_ID = 7;
?

Maxemius
Сообщения: 2
Зарегистрирован: 22 сен 2005, 23:03

Сообщение Maxemius » 23 сен 2005, 11:44

Огромное спасибо :-) Так, наверное, будет работать. Я сделал подобным образом, изменив запрос представления, чтобы он был немодифицируем без триггеров.

Только очень интересно получается. То есть, если представление модифицириуемо без триггеров, но если триггеры все же появляются,то начинают вести себя жутким образом? Это баг или фича? :-)

eugeney
Сообщения: 79
Зарегистрирован: 29 окт 2004, 18:51

Сообщение eugeney » 23 сен 2005, 12:25

Maxemius писал(а):Это баг или фича? :-)
Баг. В двойек исправленна.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 23 сен 2005, 12:33

вообще-то, борманы считали это фичей. Но кривизна их рук, проявленная при реализации этой "фичи", не позволяет мириться с этим. Так что в FB это было признано багом и исправлено в версии 2.0.

Ответить