创建PostgreSQL函数遇42601语法错误,返回false仍报错
解决PostgreSQL函数42601语法错误问题
问题出在你用language sql定义函数,却误用了PL/pgSQL风格的return关键字——SQL类型的函数不需要这个关键字,直接把要返回的查询语句作为函数主体即可。
修正后的代码:
create or replace function patient_age_in_range(patient_id uuid, low integer, high integer) returns bool language sql immutable returns null on null input as $$ select date_part('year', age(birthday)) between low and high from patients where id = patient_id; $$;
补充说明:
- SQL函数的逻辑直接由SQL语句构成,无需
return关键字;如果要写带return的函数,需要把语言改成plpgsql,同时用begin...end包裹逻辑。 - 用
$$作为函数体的定界符,是PostgreSQL的常用写法,能避免和语句里的单引号冲突。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

