postgres 函数中 CASE 附近的语法错误

Syntax error near CASE on postgres function

CREATE OR REPLACE FUNCTION public.defaultmapviewport(hasura_session json)
 RETURNS viewport_info
 STABLE
AS $function$
    case hasura_session ->> 'x-hasura-default-country-code'
        when 'FR' then select lat, lng from places where slug_en = 'city-paris' 
        when 'ES' then select lat, lng from places where slug_en = 'municipality-madrid'
    end;
END $function$ language SQL;

我在大小写附近遇到语法错误,尽管它看起来是正确的。可能是什么问题?

视口信息:

create table viewport_info(
    lat float,
    lng float
);

正如@AdrianKlaver 评论的那样,CASE 表达式不能独立存在,它必须是 SELECT 查询的一部分。你会想要使用

CREATE OR REPLACE FUNCTION public.defaultmapviewport(hasura_session json)
RETURNS viewport_info
STABLE
AS $function$
  SELECT lat, lng
  FROM places
  WHERE slug_en = (CASE hasura_session ->> 'x-hasura-default-country-code'
    WHEN 'FR' THEN 'city-paris' 
    WHEN 'ES' THEN 'municipality-madrid'
  END);
$function$ language SQL;

(online demo)