You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL CASE语句语法错误排查:PL/pgSQL函数报错问题

PL/pgSQL函数CASE语句语法错误修复

你的函数存在两个关键语法问题:

  1. 赋值运算符错误:PL/pgSQL中,=是比较运算符,变量赋值必须使用:=,而非=。你在THEN和ELSE后直接写new_num = 10这类语句,会被解析为比较操作而非赋值,导致语法报错。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:05:27