The following bug has been logged on the website:
Bug reference: 8568
Logged by: Joshua D. Burns
Email address: joshuadburns@hotmail.com
PostgreSQL version: 9.3.1
Operating system: Linux
Description:
Documentation Sections Affected:
* 8.4: 38.6
* 9.0, 9.1 & 9.2: 39.6
* 9.3 & devel: 40.6
Example Documentation URL:
http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html
Every example within the PLPGSQL "control structures" documentation states
that the proper syntax for closing a "CASE" statement is to use "END CASE;"
however in reality, on every version of PostgreSQL I can my hands on, "END
CASE;" throws the following exception:
ERROR: syntax error at or near "CASE"
LINE 9: END CASE;
However if I use "END;" in place of "END CASE;", the script executes as
expected. This leads me to believe the documentation for "CASE" statements
across all current versions of the documentation, are incorrect.
=====================================
Example CASE statement with END CASE;
-------------------------------------
DO LANGUAGE "plpgsql" $BODY$
DECLARE my_var INTEGER := 2; BEGIN
RAISE NOTICE
'%',
CASE
WHEN my_var = 1 THEN 'one'
WHEN my_var = 2 THEN 'two'
WHEN my_var = 3 THEN 'three'
END CASE;
END $BODY$;
=====================================
Results In Unexpected Behavior:
ERROR: syntax error at or near "CASE"
LINE 9: END CASE;
=====================================
Example CASE statement using END;
-------------------------------------
DO LANGUAGE "plpgsql" $BODY$
DECLARE my_var INTEGER := 2; BEGIN
RAISE NOTICE
'%',
CASE
WHEN my_var = 1 THEN 'one'
WHEN my_var = 2 THEN 'two'
WHEN my_var = 3 THEN 'three'
END;
END $BODY$;
-------------------------------------
Results In Expected Behavior:
NOTICE: two
I haven't checked, but this could also affect IF statements, specifically
"END IF;" vs. "END;" as well.