Вниз
Скачать: CL | DM;

Может ли кто помочь с триггером?   Найти похожие ветки 

 
Alex Chu   (2003-02-18 14:42) [0]

Есть типичная ситуация - нужен триггер, который при обновлении одного поля в этой таблице обновлял соответствующее поле в другой таблице по несложной логике...

Проблема в понимании работы sybase, а именно:
триггера "операционные", а не "строковые", т.е. при обновлении триггер запускается один раз и применяется ко всем записям...

Есть ли кто-нибудь, сталкивавшийся с этой проблемой?


 
passm ©   (2003-02-18 17:06) [1]

Alex Chu (18.02.03 14:42)> Триггеры подобного рода есть не только в Sybase.
Их понять вовсе не сложно. Есть пара алиасов - виртуальных копий таблицы. Содержание которых - старые значения и новые значения.
Опишу для DB2, поскольку, судя по вопросу, для тебя важно понимание и с Sybase"ом я не знаком
CREATE TRIGGER <TRIGGER NAME> - без комментариев
AFTER UPDATE OF <FIELD1>,..<FIELDN> ON <TABLE NAME> - думаю, это понятно :)
FOR EACH STATEMENT - это как раз и указывает способ работы триггера
REFERENCES OLD_TABLE AS OLDTAB NEW_TABLE AS NEWTAB - объявление алиасов на новые и старые значения
MODE DB2SQL - так уж надо :)
WHEN ( <условие> )
BEGIN ATOMIC
< TRIGGER STATEMENT >
END
<условие>, например, може быть примерно такого содержания:
WHEN ( EXISTS(SELECT OLDTAB.ID FROM OLDTAB INNER JOIN NEWTAB ON (OLDTAB.ID = NEWTAB.ID) INNER JOIN TABLE1 T1 ON (OLDTAB.ID = T1.ID) WHERE OLDTAB.FIELD1 <> NEWTAB.FIELD1 AND NEWTAB.FIELD1 <> T1.FIELD1) )
< TRIGGER STATEMENT > IS:
UPDATE TABLE1 T1
SET T1.FIELD1 = (SELECT NEWTAB.FIELD1 FROM NEWTAB WHERE NEWTAB.ID = T1.ID)
WHERE T1.ID IN (SELECT OLDTAB.ID FROM OLDTAB INNER JOIN NEWTAB ON (OLDTAB.ID = NEWTAB.ID) WHERE OLDTAB.FIELD1 <> NEWTAB.FIELD1)

ЗЫ: Надеюсь, поможет :)



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

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



Память: 0.45 MB
Время: 0.01 c
1-29917
Ozone
2003-02-27 08:02
2003.03.10
Как получить текущую директорию запускаемого exe-файла.


6-29987
alcat
2002-12-18 17:30
2003.03.10
Как закрыть все порты только для одного IP?


14-30089
Igorek
2003-02-20 17:13
2003.03.10
Дока по CM_* сообщениям


8-29961
Nimda2000
2002-11-29 08:33
2003.03.10
Доступ к avi


6-29996
KoHe4Ho }|{e 6ot
2003-01-22 21:03
2003.03.10
Как написать свой DNS ?




   Наверх