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

PostgreSQL中CREATE FUNCTION嵌入CASE表达式报错求助

修复PostgreSQL函数中CASE表达式的语法错误

你的函数代码存在几个语法和逻辑问题,导致报错,具体问题和修正方案如下:

问题点

  • 变量名不匹配:声明的变量是genreWord,但INTO子句里写的是genre,变量名称不一致
  • SELECT语句末尾缺少分号,PostgreSQL要求语句以分号结尾
  • 缺少RETURN语句:函数声明了返回VARCHAR(40),但没有返回结果的语句
  • 未处理未匹配的category_id:CASE表达式没有ELSE分支,当传入的ID不是1或12时会返回NULL,建议补充ELSE逻辑

修正后的代码

CREATE OR REPLACE FUNCTION idtoword(category_id INTEGER)
RETURNS VARCHAR(40)
LANGUAGE plpgsql
AS
$$
DECLARE genreWord VARCHAR(40);
BEGIN
    SELECT CASE category_id 
        WHEN 12 THEN 'COMEDY'
        WHEN 1 THEN 'DRAMA'
        ELSE 'UNKNOWN' -- 处理未匹配的分类ID
    END
    INTO genreWord; -- 匹配声明的变量名
    
    RETURN genreWord; -- 返回结果
END;
$$

简化版(无需变量)

如果不需要额外处理,还可以简化成更简洁的形式,直接返回CASE表达式的结果:

CREATE OR REPLACE FUNCTION idtoword(category_id INTEGER)
RETURNS VARCHAR(40)
LANGUAGE plpgsql
AS
$$
BEGIN
    RETURN CASE category_id 
        WHEN 12 THEN 'COMEDY'
        WHEN 1 THEN 'DRAMA'
        ELSE 'UNKNOWN'
    END;
END;
$$

甚至可以用SQL语言编写函数,更轻量:

CREATE OR REPLACE FUNCTION idtoword(category_id INTEGER)
RETURNS VARCHAR(40)
LANGUAGE sql
AS
$$
    SELECT CASE category_id 
        WHEN 12 THEN 'COMEDY'
        WHEN 1 THEN 'DRAMA'
        ELSE 'UNKNOWN'
    END;
$$

内容的提问来源于stack exchange,提问作者LilChopCheese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:52:11