Search code examples
postgresqlfunctionsyntax-error

PosgtreSQL create function


I'am try to create function in but have 42601 error code (SQL Error [42601]: ERROR: syntax error at or near "return"). Try to return false and still have error.

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)

Solution

  • You need some quoting (most people use $-quoteing) and drop the RETURN statement:

    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
    $$;
    

    Usually a function that selects data from a table is labeled as volatile, not immutable.