我有一个名为“ reserves”的表,练习要求我创建一个函数,该函数计算id小于我作为函数唯一参数给出的id的保留数。他们还问我,当我引入'NULL'作为参数时,该函数必须对'import'列中的所有导入求和并显示总数。我有一半的职能工作。 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'参数运行该函数时,我只会得到一个空表,没有总和。