Affects: PostgreSQL <= 7.4
The keyword ELSEIF appears to be valid syntax. However it does not seem to be acted upon, as demonstrated by this function:
CREATE OR REPLACE FUNCTION iftest(INT)
RETURNS VARCHAR
LANGUAGE 'plpgsql'
AS
'
DECLARE
nr ALIAS FOR $1;
BEGIN
IF nr < 0
THEN RETURN ''subzero'';
ELSEIF nr >= 0
THEN RETURN ''zero or larger'';
ELSE
RETURN ''something strange has happened'';
END IF;
END;
';
Logically this should report whether the parameter is less than zero or not. However:
test=> SELECT iftest(1);
iftest
--------------------------------
something strange has happened
(1 row)
The correct keyword is ELSIF (note the missing E). The relevant documentation is at: http://www.postgresql.org/docs/current/7.4/plpgsql-control-structures.html#PLPGSQL-CONDITIONALS.
See these threads: http://archives.postgresql.org/pgsql-bugs/2004-11/msg00297.php and http://archives.postgresql.org/pgsql-general/2004-12/msg00789.php for some background on why ELSEIF doesn't work.
This problem has been fixed in 8.0.