[Редактировать] Я просто заметил, что этот вопрос был задан несколько месяцев назад. Я оставлю свой ответ, поскольку он может быть полезен другим пользователям.
Поскольку вы используете агрегированную функцию SUM, вам не нужен обработчик исключений - no_data_found никогда не будет поднят. Если вы не хотите, чтобы строки не возвращались, завершите SUM с помощью NVL, иначе вы получите значение NULL, и в этом случае результат возврата также будет NULL.
Кроме того, вы не объявляли переменную nrutilizatori, имели синтаксическую ошибку (вы не писали ';' после оператора select) и возможную логическую/числовую ошибку - если возможно, чтобы функция calculeaza_total_utilizatori возвращала 0, вы получит деление на нулевую ошибку, и если он сможет вернуть NULL, ваш конечный результат также будет NULL.
Еще один дополнительный комментарий - функции должны возвращать значение во всех случаях, включая блоки обработчиков исключений, иначе вы получите ошибку ORA-06503 «Функция возвращается без значения». Это не произойдет в вашем случае, потому что no_data_found не будет поднят, но вы должны помнить об этом для будущего развития.
Полная функция следующая (без проверки функции calculeaza_total_utilizatori), хотя я не понимаю эту функцию/запрос (или calculeaza_total_utilizatori) - почему нет входных переменных? Похоже, вы могли бы просто суммировать все из таблицы planificare, не присоединяясь к другим таблицам. Не уверен, что если это действительно требование ...
CREATE OR REPLACE FUNCTION calculeaza_total_incasari RETURN NUMBER IS
incasari NUMBER;
nrutilizatori NUMBER;
BEGIN
nrutilizatori := calculeaza_total_utilizatori;
SELECT NVL(SUM(p.pret), 0)
INTO incasari
FROM rezervare r, planificare p, film f
WHERE f.idfilm = p.idfilm
AND r.idplanificare = p.idplanificare;
RETURN incasari/nrutilizatori;
END;
просьба представить схему для 'rezervare,' 'planificare и' film' – piyushj
Вы не объявили переменные '' nrutilizatori' и calculeaza_total_utilizatori' – Noel