неверный номер или типы аргументов в вызове процедуры (PLS00306) - PullRequest
0 голосов
/ 18 декабря 2018
create or replace procedure flight_search(
v_source in flights.origin_ap%type,
v_destination in flights.destination_ap%type,
v_date in flights.depart_date%type,
v_flightid out flights.flightid%type,
v_fare out flights.fare%type)
 is
cursor search_flight is SELECT flightid FROM flights
where v_source = origin_ap and v_destination = destination_ap and v_date = 
depart_date;
begin

open search_flight;
loop
fetch search_flight into v_flightid;
exit when search_flight%NOTFOUND;
dbms_output.put_line('Leaves from - ' || v_source || '. Arrives at - ' || 
v_destination || '. Fare - ' || v_fare);
end loop;
close search_flight;
end;

выполнение с помощью

execute flight_search('JFK', 'LHR', '11/25/18');

Получение неверного числа или типов аргументов при вызове flight_search.Я предполагаю, что это как-то связано с переменными flightid и тарифа.

1 Ответ

0 голосов
/ 18 декабря 2018

Ваша процедура имеет 5 формальных аргументов, а ваш вызов имеет только 3. Вам нужно указать где-нибудь, чтобы переменные out были отправлены.Поскольку вы, похоже, используете SQL * Plus или SQL Developer, судя по execute, вы можете использовать переменные связывания, а затем распечатывать их после вызова:

variable l_flightid number;
variable l_fare number;

execute flight_search('JFK', 'LHR', date '2018-11-25', l_flightid, l_fare);

print l_flightid

Я также изменил третийаргумент фактической даты, а не строка, которая должна быть неявно преобразована в дату с использованием текущих настроек NLS сеанса.Я использовал литерал даты , но вы также можете использовать to_date() со строковым литералом и подходящей маской формата.

Кстати, вы в настоящее время не заполняете v_fare.поэтому я не стал печатать эту переменную после вызова;и неясно, откуда это взялось.И вы можете рассмотреть возможность использования неявного цикла курсора вместо явного.

...