Re: Evaluation of if conditions
От | Oisin Glynn |
---|---|
Тема | Re: Evaluation of if conditions |
Дата | |
Msg-id | 44FF5404.2010604@oisinglynn.com обсуждение исходный текст |
Ответ на | Evaluation of if conditions (Daniel CAUNE <d.caune@free.fr>) |
Список | pgsql-sql |
Daniel CAUNE wrote: > Hi, > > How does the IF statement evaluate conditions? Does it evaluate conditions > following their declaration order from left to right? In case of > or-conditions, does the IF statement stop evaluating conditions whenever a > first or-condition is true? > > The following snippet seems to be invalid, which let me think that PL/PGSQL > evaluates all the conditions: > > IF (TG_OP = 'INSERT') OR > (OLD.bar = ...) THEN > statement > END IF; > > Should be rewritten as (for example): > > IF (TG_OP = 'INSERT') THEN > statement > ELSIF (OLD.bar = ...) THEN > statement > END IF; > > > Regards, > > -- > Daniel > > > ---------------------------(end of broadcast)--------------------------- > TIP 9: In versions below 8.0, the planner will ignore your desire to > choose an index scan if your joining column's datatypes do not > match > The following is working fine for me on 8.1.x on Windows. I am not sure what order it is evaluating the if statement in but it is working correctly. Oisin CREATE OR REPLACE FUNCTION zfunc_testor(bool, bool) RETURNS "varchar" AS $BODY$DECLARE v_1 boolean; v_2 boolean; BEGIN v_1 :=$1; v_2 := $2; if (v_1 = TRUE) OR (v_2 = TRUE) then return 'At least 1 true'; else return 'neither true'; end if; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION zfunc_testor(bool, bool) OWNER TO postgres;
В списке pgsql-sql по дате отправления: