Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-29980
dimich1978
2003-01-21 10:36
2003.03.10
Разделение данных в TclientSocket...


3-29715
Max_9999
2003-02-18 14:26
2003.03.10
ClientDataSet и Paradox


3-29697
Dracula2000
2003-02-18 10:38
2003.03.10
Есть проблемка с DLL & InterBase


1-29883
OlegKrt
2003-02-26 13:51
2003.03.10
Окно Excel в MDI приложении


3-29708
alex_bredin
2003-02-18 16:04
2003.03.10
TQRPreview





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский