Thread: Confused with LABEL and LOOP
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'';
LOOP
Raise Notice ''Loop 1'';
EXIT LOOP1;
END LOOP;
END LOOP;
RETURN 0;
END'
LANGUAGE 'plpgsql';
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"
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
"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
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