A co dostaniesz za wynik jak wpiszesz
SELECT wynajem.data_zwrotu::date - wynajem.data_wypozyczenia::date FROM wynajem WHERE wynajem.kto_wynajal = id_users;
I co oznacza w funkcji CREATE FUNCTION liczba(INT) ten INT co tu podajesz?
wynajem.kto_wynajal = $1;
return liczba;
a tu pod to $1 nie wstawi ci parametru tego z liczba(int) i to ma byc jako id_user który wynajął ?
DECLARE
liczba timestamp;
A ta deklaracja ? czemu ma ci zwrocic datę skoro chcesz tylko liczbe dni nie powinno tu byc INTEGER ?
CREATE FUNCTION liczba(INT) RETURNS INTEGER
LANGUAGE plpgsql
AS
'
DECLARE
liczba INTEGER;
BEGIN
SELECT wynajem.data_zwrotu::DATE - wynajem.data_wypozyczenia::DATE INTO liczba FROM wynajem WHERE wynajem.kto_wynajal = $1;
RETURN liczba;
END;
';
To tylko przykład pisany z jednym zamkniętym okiem więc mogę się grubo mylić.
A najlepiej jak się uczyć to poprawnie i żeby kod był czytelny no bo możesz mieć 10 zmiennych w funkcji czy wiecej, to dobrze jest zrobić sobie aliasy pod zmienne żeby potem w SQLce widzieć o co chodzi to możesz zrobić tak:
CREATE FUNCTION liczba(INT) RETURNS INTEGER
LANGUAGE plpgsql
AS
'
DECLARE
liczba INTEGER;
id_user ALIAS FOR $1;
BEGIN
SELECT wynajem.data_zwrotu::DATE - wynajem.data_wypozyczenia::DATE INTO liczba FROM wynajem WHERE wynajem.kto_wynajal = id_user;
RETURN liczba;
END;
';