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
相关产品推荐
相关产品推荐

