Я бы переписал вашу функцию как:
CREATE OR REPLACE FUNCTION leaguepts (team preleague.team1%TYPE) RETURN NUMBER AS
cumulpts NUMBER(3) := 0;
cumulpts2 NUMBER(3) := 0;
vt matches.team1%TYPE;
texist EXCEPTION;
BEGIN
SELECT COUNT(team1)
INTO vt
FROM matches
WHERE team1 = team;
IF (vt > 0)
THEN
SELECT SUM(pts), SUM(pts2)
INTO cumulpts, cumulpts2
FROM preleague
WHERE team2 = team;
ELSE
RAISE texist;
END IF;
RETURN nvl(cumulpts, 0) + nvl(cumulpts2, 0);
EXCEPTION
WHEN texist THEN
dbms_output.put_line ('The team "'||team||'" does not exist');
return null;
END leaguepts;
/
А вот демонстрация работы
Я изменил вашу функцию для удаления ненужной переменной cumulpts3
, а также обновил cumulpts + cumulpts2
, чтобы использовать NVL для возврата 0, если любое из значений равно 0 (например, в моем примере команда D существует, но в предварительной лиге строк нет, поэтому возвращается 0, вместо команды B, у которой нет значения team1 в таблице соответствий, поэтому возвращается null.
Вы можете изменить эти значения соответствующим образом (может быть, вы хотите, чтобы оба значения были нулевыми? В этом случае удалите NVL
s или, возможно, вы хотите вернуть нулевое значение для присутствующей команды и -1 для отсутствующей команды, и т.д.)