1

Temat: Prosba o pomoc

Witam,

jestem dość zielony w temacie postgresa ale muszę zrobić jedną procedurę na podstawie innej.
Zrobiłem i ciągle mam errory.
Możecie zobaczyć co jest nie tak??

To jest wzór

CREATE OR REPLACE FUNCTION public.tv_primetime(integer)
 RETURNS integer
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
    DECLARE
        ttime ALIAS FOR $1;
    BEGIN
        IF ttime < 1100 THEN
            RETURN 1;
        ELSIF ttime < 1730 THEN
            RETURN 1;
        ELSIF ttime < 2230 THEN
            RETURN 2;
        ELSE
            RETURN 3;
        END IF;
    END;
$function$

a to jest moja

CREATE OR REPLACE FUNCTION tv_primetime2(integer) RETURNS integer as $$
        DECLARE ttime ALIAS FOR $1;
        BEGIN
        CASE WHEN ttime BETWEEN 600 AND 859 THEN 
        return 0; 
        WHEN ttime BETWEEN 900 AND 1559 THEN 
        return 1; 
        WHEN ttime BETWEEN 1600 AND 1729 THEN 
        return 2; 
        WHEN ttime BETWEEN 1730 AND 2229 THEN 
        return 3; 
        WHEN ttime BETWEEN 2230 AND 2600 THEN 
        return 4; 
        CASE END;
        END;
$$ IMMUTABLE LANGUAGE plpgsql;

nie wiem o co biega do końca z tymi $$ przy zwracaniu wartości, generalnie będę bardzo wdzięczny za pomoc wink

Ostatnio edytowany przez pat (2013-05-09 12:55:35)

2

Odp: Prosba o pomoc

Może tak (dodałem obsługę wartości z poza zakresów które podałeś i obsługę wartości null)
CREATE OR REPLACE FUNCTION tv_primetime2(integer) RETURNS integer as $BODY$
DECLARE ttime ALIAS FOR $1;
BEGIN
           if ttime BETWEEN 600 AND 859 THEN return 0;
        elsif ttime BETWEEN 900 AND 1559 THEN return 1;
        elsif ttime BETWEEN 1600 AND 1729 THEN return 2;
        elsif ttime BETWEEN 1730 AND 2229 THEN return 3;
        elsif ttime BETWEEN 2230 AND 2600 THEN return 4;
        ELSE RETURN 5;
        END if;
END;
$BODY$
IMMUTABLE
RETURNS NULL ON NULL INPUT
LANGUAGE plpgsql;

Przykład użycia:
with d as (values (1),(600),(900),(1600),(1730),(2230),(2601),(null))
select d.*,tv_primetime2(d.column1) from d;

3

Odp: Prosba o pomoc

Dziękuję baaaardzo smile. Wszystko śmiga bez problemu smile