Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
ВнизМожет ли кто помочь с триггером? Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c