1

Temat: Problem z utworzeniem funkcji.

Witam,

Dostałem za zadanie napisanie funkcji, która sprawdza czy dany klient przetrzymuje wypożyczoną płytę dłużej niż miesiąc.
Funkcja ta jest postaci:

CREATE or REPLACE function sprawdz(int) RETURNS varchar
language 'plpgsql'
AS
'
declare
teraz timestamp := now() - interval '1 month';
przetrzymuje varchar(50);
begin
if teraz > (select wypozyczenie.d_wypozyczenia from wypozyczenie where wypozyczenie.kto_wypozyczyl = $1)
then przetrzymuje = 'Przetrzymuje';
else przetrzymuje = 'Nie przetrzymuje';
end if;
return przetrzymuje;
end;
';

Niestety wyrzuca mi błąd o następującej treści:
" BŁĄD: błąd składni lub blisko "1"
LINIA 6: teraz timestamp := now() - interval '1 month';
                                                             ^             "

Nie mam pojęcia co robię źle, dlatego prosiłbym o pomoc i z góry dziękuję.

Ostatnio edytowany przez Estpers (2015-04-29 23:57:38)

2

Odp: Problem z utworzeniem funkcji.

To tylko błędy składniowe (nie wnikam w kod który napisałeś tylko poprawiam składnie) poniżej dwie prawie identyczne wersje twojej funkcji ale zalecam sposób 2

CREATE or REPLACE function sprawdz(int) RETURNS varchar
language 'plpgsql'
AS
'
declare
teraz timestamp;
przetrzymuje varchar(50);
begin
teraz := now() - interval ''1 month'';
if teraz > (select wypozyczenie.d_wypozyczenia from wypozyczenie where wypozyczenie.kto_wypozyczyl = $1)
then przetrzymuje := ''Przetrzymuje'';
else przetrzymuje := ''Nie przetrzymuje'';
end if;
return przetrzymuje;
end;
';

CREATE or REPLACE function sprawdz(int) RETURNS varchar
language 'plpgsql'
AS
$BODY$
declare
teraz timestamp;
przetrzymuje varchar(50);
begin
teraz := now() - interval '1 month';
if teraz > (select wypozyczenie.d_wypozyczenia from wypozyczenie where wypozyczenie.kto_wypozyczyl = $1)
then przetrzymuje := 'Przetrzymuje';
else przetrzymuje := 'Nie przetrzymuje';
end if;
return przetrzymuje;
end;$BODY$

3

Odp: Problem z utworzeniem funkcji.

Bardzo dziękuję ! Wykorzystałem pierwszy kod. Błędy okazały się głupie, jak zresztą zawsze ale grunt, że wszystko działa.
Jeszcze raz dziękuję.