Postgresql创建函数错误

Postgresql create function error

我在下面的函数中做错了什么?

CREATE OR REPLACE FUNCTION extended_sales(area_type varchar, area_code varchar, dpci varchar) RETURNS TABLE(task_id bigint, location_id int)as

$BODY$

BEGIN 
    IF area_type = 1 THEN
        RETURN QUERY select T.task_id, T.location_id from store_price.task T where T.task_payload->>'str_area_type_i'='3';
    ELSE IF area_type = 2 THEN
        RETURN QUERY select T.task_id, T.location_id from store_price.task T where T.due_date < '2017-10-06';
    ELSE
        RETURN QUERY select T.task_id, T.location_id from store_price.task T where task_payload->>'str_area_type_i'='1' and task_payload->>'str_area_c'='7'  and due_date < '2016-11-07';
    END IF;


END

$BODY$ language plpgsql;

当我运行上面的函数时,它给出了以下错误

ERROR:  syntax error at end of input
LINE 17: $BODY$ language plpgsql;

感谢任何帮助。谢谢

你有两个 IF 语句和一个 END IF。如果您想要一个 IF statement.

,请使用 ELSIF
    IF area_type = 1 THEN
        RETURN QUERY select T.task_id, T.location_id from store_price.task T where T.task_payload->>'str_area_type_i'='3';
    ELSIF area_type = 2 THEN
        RETURN QUERY select T.task_id, T.location_id from store_price.task T where T.due_date < '2017-10-06';
    ELSE
        RETURN QUERY select T.task_id, T.location_id from store_price.task T where task_payload->>'str_area_type_i'='1' and task_payload->>'str_area_c'='7'  and due_date < '2016-11-07';
    END IF;