Проверьте это с помощью
select * from user_objects where object_name = 'TRAVELERSCOUNT';
Посмотрите тип объекта и решите, что делать (удалить его и повторно использовать имя этого объекта или изменить имя функции на другое).
Предложение, если можно: вы назвали параметр почти таким же, как имя столбца:
where flight_number = flightNumber
Трудно отличить guish, который есть какой. Обычно мы предшествуем параметрам с некоторым префиксом, например p_
или par_
. Кроме того, это хорошая привычка всегда использовать псевдонимы таблиц, чтобы избежать путаницы. Наконец, в Oracle все имена объектов по умолчанию имеют значение UPPERCASE (мы не используем MixedCase
, но подчеркиваем, как в mixed_case
), но вы можете ссылаться на них, используя любой регистр.
Итак:
create or replace function f_travelers_count (p_flight_number in number)
return number
is
travelers_count number(20);
begin
select count(t.traveler_number)
into travelers_count
from travel_details t
where t.flight_number = p_flight_number;
return travelers_count;
end;