Страница 1 из 1

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

Добавлено: 22 сен 2005, 23:30
Maxemius
Добрый день, коллеги :-)

Получился странный баг в триггерах представления 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 из представления и триггеров, тоже всё нормально проходит.

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

Добавлено: 23 сен 2005, 09:12
dimitr
а если вот так:

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

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;
?

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

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

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

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