Thread: plpgsql: Is ELSE IF supported or not?

plpgsql: Is ELSE IF supported or not?

From
"Marko Kreen"
Date:
Docs seems to say it is, but following function fails to compile:

create function err_else() returns void as $$
begin   if 1 = 1 then   else if 1 = 2 then   end if;
end;
$$ language plpgsql;

ERROR:  syntax error at or near ";"
LINE 6: end;

Version 8.3.3.

-- 
marko


Re: plpgsql: Is ELSE IF supported or not?

From
"Pavel Stehule"
Date:
hello

2008/6/26 Marko Kreen <markokr@gmail.com>:
> Docs seems to say it is, but following function fails to compile:
>
> create function err_else() returns void as $$
> begin
>    if 1 = 1 then
>    else if 1 = 2 then
>    end if;
> end;
> $$ language plpgsql;
>
> ERROR:  syntax error at or near ";"
> LINE 6: end;

use elseif or elsif :)

Pavel

>
> Version 8.3.3.
>
> --
> marko
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>


Re: plpgsql: Is ELSE IF supported or not?

From
"Marko Kreen"
Date:
On 6/26/08, Pavel Stehule <pavel.stehule@gmail.com> wrote:
>  2008/6/26 Marko Kreen <markokr@gmail.com>:
> > Docs seems to say it is, but following function fails to compile:
>  >
>  > create function err_else() returns void as $$
>  > begin
>  >    if 1 = 1 then
>  >    else if 1 = 2 then
>  >    end if;
>  > end;
>  > $$ language plpgsql;
>  >
>  > ERROR:  syntax error at or near ";"
>  > LINE 6: end;
>
> use elseif or elsif :)

Yeah, I know.  Just the docs say this is one "form" of the IF statement:
 IF ... THEN ... ELSE IF

Although now that i read it more, the actual "form" is:
 ELSE    IF THEN    END IF END IF;

That is - the ELSE starts new block unconditionally and ignores any IF
that follows.  Later the IF can be part of new block as usual.  Huh.

This is confusing.  I suggest removing the "ELSE IF" as one of the "forms"
because it is not.

-- 
marko


Re: plpgsql: Is ELSE IF supported or not?

From
"Pavel Stehule"
Date:
2008/6/26 Marko Kreen <markokr@gmail.com>:
> On 6/26/08, Pavel Stehule <pavel.stehule@gmail.com> wrote:
>>  2008/6/26 Marko Kreen <markokr@gmail.com>:
>> > Docs seems to say it is, but following function fails to compile:
>>  >
>>  > create function err_else() returns void as $$
>>  > begin
>>  >    if 1 = 1 then
>>  >    else if 1 = 2 then
>>  >    end if;
>>  > end;
>>  > $$ language plpgsql;
>>  >
>>  > ERROR:  syntax error at or near ";"
>>  > LINE 6: end;
>>
>> use elseif or elsif :)
>
> Yeah, I know.  Just the docs say this is one "form" of the IF statement:
>
>  IF ... THEN ... ELSE IF
>
> Although now that i read it more, the actual "form" is:
>
>  ELSE
>     IF THEN
>     END IF
>  END IF;
>
> That is - the ELSE starts new block unconditionally and ignores any IF
> that follows.  Later the IF can be part of new block as usual.  Huh.
>
> This is confusing.  I suggest removing the "ELSE IF" as one of the "forms"
> because it is not.
>

this is same in all procedural languages

Pavel

> --
> marko
>


Re: plpgsql: Is ELSE IF supported or not?

From
Mark Mielke
Date:
Pavel Stehule wrote: <blockquote cite="mid:162867790806260432o74515e8fwfc8958adccfce6e2@mail.gmail.com"
type="cite"><prewrap="">2008/6/26 Marko Kreen <a class="moz-txt-link-rfc2396E"
href="mailto:markokr@gmail.com"><markokr@gmail.com></a>:</pre><blockquote type="cite"><pre wrap="">
 
Although now that i read it more, the actual "form" is:
ELSE   IF THEN   END IFEND IF;

That is - the ELSE starts new block unconditionally and ignores any IF
that follows.  Later the IF can be part of new block as usual.  Huh.

This is confusing.  I suggest removing the "ELSE IF" as one of the "forms"
because it is not.   </pre></blockquote><pre wrap="">
this is same in all procedural languages </pre></blockquote><br /> I don't agree with this statement. In "all
procedurallanguages", or probably most, they usually make "ELSE IF" special, in that you don't need to close the block
twiceas per above. The ELSE IF is not actually special in PL/SQL, so it is not a special form. The "ELSE" can contain a
block,which contain any statement, including a nested IF statement. Why not describe ELSE WHILE as well based upon the
logicthat ELSE IF is valid? :-)<br /><br /> Now, if it were to say "an alternative form of ELSEIF is to nest IF
statementlike so:" ...<br /><br /> Cheers,<br /> mark<br /><br /><pre class="moz-signature" cols="72">-- 
 
Mark Mielke <a class="moz-txt-link-rfc2396E" href="mailto:mark@mielke.cc"><mark@mielke.cc></a>
</pre>

Re: plpgsql: Is ELSE IF supported or not?

From
Tom Lane
Date:
Mark Mielke <mark@mark.mielke.cc> writes:
> I don't agree with this statement. In "all procedural languages", or 
> probably most, they usually make "ELSE IF" special, in that you don't 
> need to close the block twice as per above. The ELSE IF is not actually 
> special in PL/SQL, so it is not a special form. The "ELSE" can contain a 
> block, which contain any statement, including a nested IF statement. Why 
> not describe ELSE WHILE as well based upon the logic that ELSE IF is 
> valid? :-)

> Now, if it were to say "an alternative form of ELSEIF is to nest IF 
> statement like so:" ...

Yeah, that might be better.  I think the reason the text looks the way
it does is that we didn't have ELSEIF/ELSIF to start out with, and what
is now section 38.6.2.3 was originally an example of what you had to do
to work around that lack.  I agree that the current presentation is more
confusing than anything else.  ISTM documenting ELSEIF and ELSIF as
"separate forms" of IF is a bit over-the-top too.
        regards, tom lane