Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.07;
Скачать: CL | DM;

Вниз

как создать триггер   Найти похожие ветки 

 
dolmat   (2009-02-12 10:16) [0]

есть таблица 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


 
Сергей М. ©   (2009-02-12 10:26) [1]


> как сделать триггер


Что значит "как" ?


 
Johnmen ©   (2009-02-12 10:27) [2]

1. Учить азы SQL. Акцентировать внимание на агрегатных функциях.
2. Сходить на www.ibase.ru


 
Сергей М. ©   (2009-02-12 10:34) [3]


> Johnmen ©   (12.02.09 10:27) [2]


Тут и агрегаты вряд ли не нужны, достаточно вычесть old.KOLVO и прибавить new.KOLVO)


 
Johnmen ©   (2009-02-12 10:41) [4]


> Сергей М. ©   (12.02.09 10:34) [3]

М.б. даже ничего ни вычитать ни прибавлять.
Но м.б. и агрегат...

Тьфу! Не хочу гадать.

Автору - задавать конкретные вопросы после выполнения [2]


 
dolmat   (2009-02-12 12:37) [5]

Прото выставляю на одобрям

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


 
Сергей М. ©   (2009-02-12 12:44) [6]


> dolmat   (12.02.09 12:37) [5]


А почему не нужно обновлять аккумулятор в поле KOLVO, если kolkn<=0 ?

И собссно зачем всякий раз заново перерасчитывать sum(kolvo), если вполне достаточно скорректировать kvp_us.KOLVO на величину new.SCETCIKI.kolvo - old.SCETCIKI.kolvo ?


 
dolmat   (2009-02-12 13:01) [7]

Сергей М. ©   (12.02.09 12:44) [6]

мм.да наверное перемудрил


 
Sergey13 ©   (2009-02-12 13:09) [8]

> [5] dolmat   (12.02.09 12:37)

Почему только Update? Insert и Delete тоже влияют на результат.


 
Сергей М. ©   (2009-02-12 13:27) [9]


> dolmat   (12.02.09 13:01) [7]


И опять же - нет никакого резона апдейтить аккумулятор, если new.SCETCIKI.kolvo = old.SCETCIKI.kolvo

Мало ли по каким причинам сработал триггер ! Например, обновлены какие-то другие поля таблицы, а поле SCETCIKI.kolvo при этом не претерпело изменений


 
dolmat   (2009-02-12 13:29) [10]


> Sergey13 ©   (12.02.09 13:09) [8]

влияют на результат но не в этой ситуации т.к. без insert c начальным показанием не вносится ID_связи


 
Sergey13 ©   (2009-02-12 13:41) [11]

> [10] dolmat   (12.02.09 13:29)
> влияют на результат но не в этой ситуации

ИМХО, тригер должен правильно работать при ВСЕХ возможных ситуациях.
То что сейчас обычно что-то не вносится в твоем приложении не говорит о том что это никогда не будет вноситься никем другим.
Тем более, что там писать то три строчки.



Страницы: 1 вся ветка

Текущий архив: 2010.02.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1260621639
Aleks
2009-12-12 15:40
2010.02.07
Сротировка списка в Memo


15-1259650355
Дмитрий С
2009-12-01 09:52
2010.02.07
Особенности функции feof в php под windows.


2-1260544819
Vol4
2009-12-11 18:20
2010.02.07
Работа светофора help


15-1259930302
@!!ex
2009-12-04 15:38
2010.02.07
Есть спецы в программирования для Win Mobile?


15-1258160992
TIF
2009-11-14 04:09
2010.02.07
SPDY - скоростная альтернатива HTTP от Google