PosgtreSQL create 函数

PosgtreSQL create function

提问人:Pedro 提问时间:1/12/2023 更新时间:1/12/2023 访问量:38

问:

我正在尝试创建函数,但有 42601 错误代码(SQL 错误 [42601]:错误:在“返回”或附近出现语法错误)。尝试返回 false,但仍然有错误。

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
    return (select date_part('year', age(birthday)) between low and high from patients where id = patient_id)
PostgreSQL 函数 语法错误

评论


答:

0赞 Frank Heikens 1/12/2023 #1

您需要一些引用(大多数人使用 $-quoteing)并删除 RETURN 语句:

CREATE
    OR REPLACE FUNCTION patient_age_in_range(patient_id UUID, low INTEGER, high INTEGER)
    RETURNS BOOL
    LANGUAGE SQL
    IMMUTABLE -- are you sure?
    RETURNS NULL ON NULL INPUT
AS
$$
SELECT date_part('year', age(birthday)) 
  BETWEEN low AND high
FROM patients
WHERE ID = patient_id
$$;

通常,从表中选择数据的函数被标记为可变的,而不是不可变的。

评论

0赞 1/13/2023
我同意这是错误的,但对于从表中选择的函数来说应该没问题。immutablestable