Все объявления должны заканчиваться точкой с запятой, а не запятой:
PricePerBug FLOAT;
NumberOfBugs NUMBER;
TotalIncome FLOAT;
Существуют и другие проблемы, не связанные с этой ошибкой, касающиеся обработки исключений:
Если NO_DATA_FOUND когда-либо был поднят
(это не будет) вы бы получили
ошибка "ORA-06503: PL / SQL: функция
вернулся без значения "потому что вы
обработать исключение, но не
вернуть значение.
Если когда-нибудь было вызвано TOO_MANY_ROWS (этого не произойдет), вы получите сообщение об ошибке, потому что вы не можете вернуть текст 'Too many row Возвращено ...' из функции, которая возвращает только значения типа FLOAT !
- Если когда-либо возникло какое-либо другое исключение (оно может быть), вы не будете знать, что это такое, потому что заменяете полезное исключение Oracle своим собственным бесполезным сообщением "неизвестное исключение".
Правильный объем обработки ошибок для этой конкретной функции - none, т. Е .:
CREATE OR REPLACE FUNCTION Function1
RETURN FLOAT
IS
PricePerBug FLOAT;
NumberOfBugs NUMBER;
TotalIncome FLOAT;
BEGIN
SELECT SUM(ProjectValue) INTO TotalIncome FROM tblProject;
SELECT COUNT(idBug) INTO NumberOfBugs FROM tblBug;
PricePerBug := (NumberOfBugs)/(TotalIncome);
RETURN PricePerBug;
END Function1;