Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.10;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.016 c
14-30088
ASV
2003-02-21 16:05
2003.03.10
Союз нерушимый...


14-30015
Delirium^.Tremens
2003-02-14 16:59
2003.03.10
Кто что читает?


1-29878
AlexanderSK
2003-02-26 13:28
2003.03.10
RemoteDataModule - Interface как передать строку?


7-30163
Drex
2003-01-08 09:27
2003.03.10
Как проверить наличие в системе портов LPT1 и LPT2 ?


6-29998
allsamara
2002-12-27 10:02
2003.03.10
Как с помощью Indy компанент слать данные.