-
есть таблица SCETCIKI вида
лс пок.нач пок.кон. кол-во ID_usl_k
в ней несколько записей со ссылкой на один ID_usl_k из другой таблицы kvp_us
как сделать триггер
CREATE TRIGGER UPD_SCETCIK1 FOR SCETCIKI
ACTIVE AFTER UPDATE POSITION 1
AS
begin
update kvp_us set kvp_us.KOLVO=sum(SCETCIKI.KOLVO) where kvp_us.NPP=SCETCIKI.ID_US_K;
end
-
> как сделать триггер
Что значит "как" ?
-
1. Учить азы SQL. Акцентировать внимание на агрегатных функциях.
2. Сходить на www.ibase.ru
-
> Johnmen © (12.02.09 10:27) [2]
Тут и агрегаты вряд ли не нужны, достаточно вычесть old.KOLVO и прибавить new.KOLVO)
-
> Сергей М. © (12.02.09 10:34) [3]
М.б. даже ничего ни вычитать ни прибавлять.
Но м.б. и агрегат...
Тьфу! Не хочу гадать.
Автору - задавать конкретные вопросы после выполнения [2]
-
Прото выставляю на одобрям
CREATE TRIGGER UPD_SCETCIK1 FOR SCETCIKI
ACTIVE AFTER UPDATE POSITION 1
AS
DECLARE VARIABLE kolkn FLOAT;
begin
SELECT sum(kolvo) from SCETCIKI where (ID_US_K=old.ID_US_K)
into :kolkn;
if (:kolkn>0) then
begin
update kvp_us set KOLVO=:kolkn where NPP=old.ID_US_K;
end
end
-
> dolmat (12.02.09 12:37) [5]
А почему не нужно обновлять аккумулятор в поле KOLVO, если kolkn<=0 ?
И собссно зачем всякий раз заново перерасчитывать sum(kolvo), если вполне достаточно скорректировать kvp_us.KOLVO на величину new.SCETCIKI.kolvo - old.SCETCIKI.kolvo ?
-
Сергей М. © (12.02.09 12:44) [6]
мм.да наверное перемудрил
-
> [5] dolmat (12.02.09 12:37)
Почему только Update? Insert и Delete тоже влияют на результат.
-
> dolmat (12.02.09 13:01) [7]
И опять же - нет никакого резона апдейтить аккумулятор, если new.SCETCIKI.kolvo = old.SCETCIKI.kolvo
Мало ли по каким причинам сработал триггер ! Например, обновлены какие-то другие поля таблицы, а поле SCETCIKI.kolvo при этом не претерпело изменений
-
> Sergey13 © (12.02.09 13:09) [8]
влияют на результат но не в этой ситуации т.к. без insert c начальным показанием не вносится ID_связи
-
> [10] dolmat (12.02.09 13:29)
> влияют на результат но не в этой ситуации
ИМХО, тригер должен правильно работать при ВСЕХ возможных ситуациях.
То что сейчас обычно что-то не вносится в твоем приложении не говорит о том что это никогда не будет вноситься никем другим.
Тем более, что там писать то три строчки.