2017-11-13 1 views
1

다음 기능에서 나는 무엇을 잘못하고 있습니까? 나는 위의 함수를 실행하면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; 

다음과 같은 오류를 제공합니다. 감사.

+3

나는 그것을 컴파일하려고하지 않았다,하지만 당신은'END' 후 세미콜론이 필요하지 않습니다? – Hambone

+0

끝나기 전에'return;'이 필요합니까? –

+0

@Hambone : 아니, 그렇지 않아. 결국 선택 사항입니다. –

답변

5

두 개의 IF 문과 하나의 END IF가 있습니다. 당신이하려는 경우 ELSIF를 사용하여 하나의 IF statement.

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;