Confused with LABEL and LOOP

Started by Patrick Ficheover 21 years ago3 messagesgeneral
Jump to latest
#1Patrick Fiche
patrick.fiche@aqsacom.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Patrick Fiche (#1)
Re: Confused with LABEL and LOOP

"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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#2)
Re: Confused with LABEL and LOOP

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