PostgreSQL CASE语句语法错误排查:PL/pgSQL函数报错问题
PL/pgSQL函数CASE语句语法错误修复
你的函数存在两个关键语法问题:
- 赋值运算符错误:PL/pgSQL中,
=是比较运算符,变量赋值必须使用:=,而非=。你在THEN和ELSE后直接写new_num = 10这类语句,会被解析为比较操作而非赋值,导致语法报错。 - CASE语句结束符错误:作为流程控制语句的CASE,必须用
END CASE;来结束,而不是END;——后者会被PL/pgSQL误判为BEGIN代码块的结束标记,进一步引发语法冲突。
修复方案一:修正流程控制CASE的语法
CREATE OR REPLACE FUNCTION my_function(old_num INTEGER) returns INTEGER language plpgsql AS $$ DECLARE new_num INTEGER; BEGIN CASE WHEN old_num IN (1, 2, 3, 4) THEN new_num := 10; WHEN old_num IN (5, 6, 7, 8) THEN new_num := 20; ELSE new_num := 0; END CASE; RETURN new_num; END; $$;
修复方案二:使用CASE表达式直接赋值(更简洁)
可以将CASE作为表达式直接赋值给变量,甚至省略变量直接返回结果,代码更紧凑:
CREATE OR REPLACE FUNCTION my_function(old_num INTEGER) returns INTEGER language plpgsql AS $$ BEGIN RETURN CASE WHEN old_num IN (1, 2, 3, 4) THEN 10 WHEN old_num IN (5, 6, 7, 8) THEN 20 ELSE 0 END; END; $$;
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

