Помогите создать триггер. Хотя не столь триггер, как функцию, которую мой тригер будет вызывать.
Задача:
Есть таблица table
id | col | status | last_status
-------------------------------
1 | ddf | 2 | 0
2 | dfd | 3 | 2
Нужно сделать так, чтобы только до того как сменится значение status в last_status записалось его значение (запоминасем старый статус), а на другие изменения никаких действий не делать. Например, если изменится значение колонки col, то ничего делать не надо.
Собственно проблема в том, как узнать, что именно в status происходит изменения. Или наоборот. как узнать, что поле status не меняется.
Кто знает?
Спустя 21 минута, 9 секунд (15.09.2009 - 13:49) sergeiss написал(а):
Это не просто... А очень просто 
Там есть объекты с очень "значащими" именами new и old.
new содержит все новые значения, old - все старые.
Надо сравнить новый status и старый last_status? Да нет проблем! В триггере апдейта пишем

Там есть объекты с очень "значащими" именами new и old.
new содержит все новые значения, old - все старые.
Надо сравнить новый status и старый last_status? Да нет проблем! В триггере апдейта пишем
Код |
if new.status != old.last_status then -- тут что-то делаем -- например, устанавливаем новый статус new.status := 1 -- ежели не надо делать изменения вообще никакие, то пишем return null; -- а ежели надо делать изменения, в т.ч. все наши дополнения, которые мы где-то выше внесли, то пишем return new; end if; -- конец блока |
PS. Я тут не особо вникал в эти статусы, когда писал (новый, старый, изменен - не изменен). Это не принципиально. Потому что я говорил в первую очередь про принцип, про алгоритм.
Спустя 11 минут, 25 секунд (15.09.2009 - 14:01) olgatcpip написал(а):
sergeiss, спасибо. Я примерно так и думала: про new знала, а про old нет (хоть и логично...). Вечером напишу функцию

Спустя 6 минут, 44 секунды (15.09.2009 - 14:07) sergeiss написал(а):
А там много чего полезного в триггер передается
Целая куча объектов.
Для поиска этой информации достаточно скачать хэлп из моей подписи. И ввести там слово "trigger".

Для поиска этой информации достаточно скачать хэлп из моей подписи. И ввести там слово "trigger".
Спустя 6 часов, 9 минут, 33 секунды (15.09.2009 - 20:17) olgatcpip написал(а):
sergeiss, хочу сказать тебе спасибо. После твоего ответа
Цитата |
Код if new.status != old.last_status then ..... |
, я написала таки триггер. Теперь я их не боюсь! Более того, хочу много где использовать

Спустя 11 часов, 40 минут, 58 секунд (16.09.2009 - 07:58) sergeiss написал(а):
Цитата (olgatcpip @ 15.09.2009 - 21:17) |
Теперь я их не боюсь! Более того, хочу много где использовать ![]() |
"И это правильно!" (с) М.С.Горбачев

_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький блог
в этом блоге публикую новые работы
WMR217126627282 wink.gif