Thread: Confused with LABEL and LOOP

Confused with LABEL and LOOP

From
"Patrick Fiche"
Date:
Hi,
 
I'm a bit confused with the use of Label for loops in PostgreSQL.
I'm using PostgreSQL 8.0 Beta2 version on WIN32 platform.
 
------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION TEST( ) RETURNS int4 AS '
 
BEGIN
 
<<LOOP1>>
LOOP
  Raise Notice ''Loop 1'';
 
  EXIT LOOP1;
END LOOP;
 
RETURN 0;
 
END'
LANGUAGE 'plpgsql';
------------------------------------------------------------------------------------
 
When I call SELECT TEST(), I get the error message :
ERROR:  control reached end of function without RETURN
CONTEXT:  PL/pgSQL function "test"
 
If I just change EXIT LOOP1 to EXIT -> everything is OK
I think we previously had the possibility to indicate the LABEL in EXIT statement...
 
Regards,
 
Patrick

    -------------------------------------------------------------------------------------------
    Patrick Fiche
    email : patrick.fiche@aqsacom.com
    -------------------------------------------------------------------------------------------

 




Protected by Polesoft Lockspam

http://www.polesoft.com/refer.html

Re: Confused with LABEL and LOOP

From
Tom Lane
Date:
"Patrick Fiche" <patrick.fiche@aqsacom.com> writes:
> I'm a bit confused with the use of Label for loops in PostgreSQL.
> I'm using PostgreSQL 8.0 Beta2 version on WIN32 platform.

> CREATE OR REPLACE FUNCTION TEST( ) RETURNS int4 AS '
> BEGIN
> <<LOOP1>>
> LOOP
>   Raise Notice ''Loop 1'';
>   EXIT LOOP1;
> END LOOP;
> RETURN 0;
> END'
> LANGUAGE 'plpgsql';

> When I call SELECT TEST(), I get the error message :
> ERROR:  control reached end of function without RETURN
> CONTEXT:  PL/pgSQL function "test"

Hmm.  I think this *should* work, and experimentation shows that it did
work up through PG 7.2.  It's broken in 7.3 and later.

Jan, do you see any fine point that makes this function wrong?  Sure
looks like a bug to me.

            regards, tom lane

Re: Confused with LABEL and LOOP

From
Tom Lane
Date:
Tom Lane <tgl@sss.pgh.pa.us> writes:
> "Patrick Fiche" <patrick.fiche@aqsacom.com> writes:
>> I'm a bit confused with the use of Label for loops in PostgreSQL.

> Sure looks like a bug to me.

Ah-hah: it's a case-sensitivity problem.  The <<>> construct downcases
its label identifier, but EXIT forgets to do so.  Spell it as
"EXIT loop1" and you'll be OK.

I'll fix this for 8.0.

            regards, tom lane