Re: "and then" / "or else" - Mailing list pgsql-general

From Michael Glaesemann
Subject Re: "and then" / "or else"
Date
Msg-id 76AE4E3A-17DD-4D9E-861D-88C70F1A1A04@seespotcode.net
Whole thread Raw
In response to "and then" / "or else"  (Christian Schröder <cs@deriva.de>)
Responses Re: "and then" / "or else"  (Christian Schröder <cs@deriva.de>)
List pgsql-general
On Nov 17, 2007, at 3:53 , Christian Schröder wrote:

> Unfortunately, the trick from the docs (chapter 4.2.12) using
> "case ... then" does not work inside an "if" statement (the "then"
> of the "case" is interpreted as belonging to the "if" and thus
> leads to a syntax error).

I think if you use parentheses you can avoid the syntax error:

CREATE FUNCTION test_case_in_if
(in in_a boolean, in in_b boolean, in in_c boolean)
RETURNS text
STABLE
STRICT
LANGUAGE plpgsql AS $body$
begin
   if (CASE WHEN in_a then (in_b and in_c) else in_b end)
   then
     return 'first branch';
   else
     return 'second branch';
   end if;
END
$body$;

test=# select test_case_in_if(true, true, true);
test_case_in_if
-----------------
first branch
(1 row)

test=# select test_case_in_if(true, false, true);
test_case_in_if
-----------------
second branch
(1 row)

test=# select test_case_in_if(false, true, false);
test_case_in_if
-----------------
first branch
(1 row)

Michael Glaesemann
grzm seespotcode net



pgsql-general by date:

Previous
From: Christian Schröder
Date:
Subject: "and then" / "or else"
Next
From: Michael Glaesemann
Date:
Subject: Re: Composite types for composite primary/foreign keys?