Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.006 c
3-1234183945
Ulugbek
2009-02-09 15:52
2010.02.07
Помагите мне как филтьровать в Ehlib DbGridEh IbClientdatset


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


3-1234507272
matveih1
2009-02-13 09:41
2010.02.07
ibconsvc.exe


4-1228802818
DimonS
2008-12-09 09:06
2010.02.07
Как реализовать чтение iButton?


15-1259767731
Ruzzz
2009-12-02 18:28
2010.02.07
Экпорт исходного кода из IDE в RTF/HTML




   Наверх