Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1260544819
Vol4
2009-12-11 18:20
2010.02.07
Работа светофора help


2-1260456442
Proxytel
2009-12-10 17:47
2010.02.07
Как читать индикатор чтения-записи жесткого диска?


2-1260547440
JohnKorsh
2009-12-11 19:04
2010.02.07
Работа с INDY.


4-1228651381
Fildy
2008-12-07 15:03
2010.02.07
определение родильского PID


15-1259840977
Insor
2009-12-03 14:49
2010.02.07
Чем составлен данный дамп БД?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский