У меня есть таблица с именем «резерва», и в упражнении меня попросили создать функцию, которая подсчитывает, сколько резервирований с идентификатором ниже идентификатора, который я даю в качестве единственного параметра функции. Они также спрашивают меня, что когда я ввожу «NULL» в качестве параметра, функция должна сделать сумму всех импортов из столбца «импорт» и показать итоговую сумму. У меня половина функции работает. Часть 'NULL' - это та, которая не работает.
Теперь у меня есть это:
CREATE OR REPLACE FUNCTION compta_reserves(int) RETURNS int AS $$
DECLARE
num_reserves INT:=(SELECT COUNT(*) FROM mobilitat.reserves);
id ALIAS FOR $1;
comptador INT:=0;
i INT:=1;
import_total double precision:=((SELECT SUM(import) FROM mobilitat.reserves WHERE import<60)::INT);
BEGIN
IF (id=NULL) THEN
RETURN import_total AS int;
ELSE
WHILE i<num_reserves LOOP
IF (SELECT id_reserva FROM mobilitat.reserves WHERE id_reserva=i)<id THEN
IF (SELECT import FROM mobilitat.reserves WHERE id_reserva=i)<60 THEN
comptador=comptador+1;
END IF;
END IF;
i=i+1;
END LOOP;
RETURN comptador;
END IF;
END;
$$ LANGUAGE PLPGSQL;
Когда я запускаю функцию с параметром "NULL", я просто получаю пустую таблицу снет суммы.