Задействане с множество условия КОГА

Как да включа колоните, които трябва да наблюдавам? т.е. вместо едно WHEN условие искам да имам 3 WHEN условия:

CREATE  TRIGGER freeradius.insert_into_day_summations 
     BEFORE INSERT ON freeradius.day_guiding_usage
     FOR EACH ROW 
     WHEN (OLD.col1 IS DISTINCT FROM NEW.col1)
     WHEN (OLD.col2 IS DISTINCT FROM NEW.col2)
     WHEN (OLD.col3 IS DISTINCT FROM NEW.col3)
EXECUTE procedure update_sessioninfo();

person user2594853    schedule 21.08.2013    source източник
comment
Опитахте ли току-що да ги комбинирате с OR? В документацията се казва, че това е просто булево условие. Трябва да работи добре.   -  person Dark Falcon    schedule 21.08.2013


Отговори (2)


Формирайте един израз с OR или AND - в зависимост от това дали искате да задействате, когато са изпълнени всички условия или когато е изпълнено едно условие:

CREATE TRIGGER update_day_summations  -- see below
BEFORE UPDATE ON freeradius.day_guiding_usage
FOR EACH ROW 
WHEN (OLD.col1 IS DISTINCT FROM NEW.col1
   OR OLD.col2 IS DISTINCT FROM NEW.col2
   OR OLD.col3 IS DISTINCT FROM NEW.col3)
EXECUTE procedure update_sessioninfo();

Това е просто булев израз, който може да включва всички колони на реда.
Въпреки това вашите изрази имат смисъл само за UPDATE, не и за INSERT. Няма OLD запис за вмъквания. Ръководството за CREATE TRIGGER:

condition

Булев израз, който определя дали тригерната функция действително ще бъде изпълнена. Ако е указано WHEN, функцията ще бъде извикана само ако condition върне true. В тригерите FOR EACH ROW условието WHEN може да препраща към колони от старите и/или новите стойности на реда, като напише OLD.column_name или NEW.column_name съответно. Разбира се, тригерите INSERT не могат да се отнасят за OLD и тригерите DELETE не могат да се отнасят за NEW.

И самото име на тригера не може да бъде квалифицирано като схема. Цитирайки ръководството още веднъж:

name

Името, което да дадете на новия тригер. Това трябва да е различно от името на всеки друг тригер за същата таблица. Името не може да бъде квалифицирано като схема

Удебелени акцент мой.

person Erwin Brandstetter    schedule 21.08.2013

TG_КОГА

Тип данни текст; низ от BEFORE, AFTER или INSTEAD OF, в зависимост от дефиницията на тригера.

ето връзка, която може да използвате

http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html

person AmirtharajCVijay    schedule 22.08.2013