Re: PL/PGSQL: why IF test the whole condition before failing or not?
От | Jasen Betts |
---|---|
Тема | Re: PL/PGSQL: why IF test the whole condition before failing or not? |
Дата | |
Msg-id | h6jj1o$ato$1@reversiblemaps.ath.cx обсуждение исходный текст |
Ответ на | PL/PGSQL: why IF test the whole condition before failing or not? (Suporte PK <fknoedt@gmail.com>) |
Список | pgsql-general |
On 2009-08-18, Suporte PK <fknoedt@gmail.com> wrote: > Hi list, > > I'm having trouble with - believe me! - the IF operator on a PL/PGSQL > function used by a trigger. > > I'm using one unique function to process the three triggers events > (delete, update and insert), but when I reference OLD or NEW on a IF > CONDITION, I get an error even when testing BEFORE if it's a UPDATE > event or not. > > example: > > IF TG_OP = 'UPDATE' AND OLD.field != NEW.field THEN > ... > END IF; > > The question is: if the trigger was not fired by an UPDATE event, > shouldn't it make the first test and then ignore the rest of the condition? > > I know that some languages work like this (testing the whole condition) > while others don't, but I searched for an alternative without success. > > Any advice would be much appreciated! as you see a few more error messages (or unlike me get as far as http://www.postgresql.org/docs/8.4/static/plpgsql-expressions.html in the manual and understand it) you'll come to understand that every /expression/ in plpgsql is translated into a select, this can be exploited to simplifiy code. avariable = somecolumn FROM atable WHERE someother=foo; but has its down sides too: SELECT TG_OP = 'UPDATE' AND OLD.field != NEW.field; doesn't pass go with NEW undefined.
В списке pgsql-general по дате отправления: