вызовите pl sql процедуру с параметрами - PullRequest
0 голосов
/ 19 января 2020

Я пытался вызвать эту процедуру, но у меня возникли некоторые проблемы

CREATE OR REPLACE Procedure InsertNewReservation
   ( flight_number IN varchar2,passenger_id IN number,flight_price in number )

   IS
   s2 number;

BEGIN
   insert into Reservations (flightNumber,passengerId) values (flight_number,passenger_id) 
                                                       returning ID into s2;

   insert into Payments (value,reservationId) values (flight_price,s2);
END;
/

Как мне вызвать процедуру? Я пытался

BEGIN
  InsertNewReservation('FL100',1,120);
END;
/

Но это не сработало: /

enter image description here

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 января 2020

Поскольку в таблице Reservation нет столбца ID, но passengerId:

CREATE OR REPLACE Procedure InsertNewReservation
                           ( 
                            flight_number Reservations.flightNumber%type,
                            passenger_id  Reservations.passengerId%type,
                            flight_price  Payments.value%type 
                           )
IS
   s2 Payments.reservationId%type;
BEGIN
   insert into Reservations (flightNumber,passengerId) 
   values(flight_number,passenger_id) returning passengerId into s2;

   insert into Payments (value,reservationId) Values (flight_price,s2);
END;
/

btw, замените переменные, чтобы они соответствовали их типам в таблице, и используйте IN Оператор является избыточным для типа параметра процедуры по умолчанию.

Демо

0 голосов
/ 19 января 2020

Удалите ключевое слово exec, которое не используется в блоке PL / SQL:

begin
  InsertNewReservation('FL100',1,120);
end;

exec используется в таких инструментах, как SQL Plus, для запуска процедуры вне PL / SQL блок:

SQL> exec InsertNewReservation('FL100',1,120);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...