[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: триггеры в postgresql
olgatcpip
Здравствуйте.

Помогите создать триггер. Хотя не столь триггер, как функцию, которую мой тригер будет вызывать.

Задача:
Есть таблица 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 написал(а):
Это не просто... А очень просто smile.gif

Там есть объекты с очень "значащими" именами 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 нет (хоть и логично...). Вечером напишу функцию smile.gif

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

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

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

"И это правильно!" (с) М.С.Горбачев laugh.gif


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

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.