I just re-checked the docs and see that ELSE IF requires an END for each ELSE IF:
if 1=3 thenif 1=2 then if 1=2 then select 1; else
select 2;END IF;
elseif 1=4 then
END IF;if 1=5 then select 3;
END IF;else select 4; end if;
end if; end if;
First thanks to Tom Lane who helped me promptly.This is odd, I replaced the else ifs with elsif and it worked on 7.4. My 7.3 documentation says that else if and elsif are equivalent.
Now let's come to the problem:
create or replace function testa( ) returns char(32) as ' begin if 1=2 then if 1=2 then select 1; elseif 1=3 then select 2; elseif 1=4 then if 1=5 then select 3; else select 4; end if; end if; end if; return md5(''aaaa''); end; ' language plpgsql;
test1=# select * from testa();
ERROR: syntax error at or near "if"
CONTEXT: compile of PL/pgSQL function "testa" near line 14
imp=# select * from testa();
testa
----------------------------------
74b87337454200d4d33f80c4663dc5e5
(1 row)
My test code (yours, slightly modified): drop function testa( );
create or replace function testa( ) returns char(32) as ' begin if 1=2 then if 1=2 then select 1; elsif 1=3 then select 2; elsif 1=4 then if 1=5 then select 3; else select 4; end if; end if; end if; return md5(''aaaa''); end; ' language plpgsql;
select * from testa();
RonI made several test functions with similar structure with no improvements. I can't even figure a pattern. I get errors on if, else, and elseif. Till now the culprit seems to be elseif. Whenever I write test functions without elseif I get no errors. Did I misinterpreted the docs (37.7.2.4)?
I really can't see the problem.
I'm running 7.4.2-1 on Debian Sarge.
To be less annoying to the list, could anyone point me to somewhere where I could look at functions written by others. Any good project with enough complicated functions to be useful to learn.
thx
---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives?
http://archives.postgresql.org
---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to majordomo@postgresql.org so that your message can get through to the mailing list cleanly