О, это только ваша единственная проблема!
- , так как вы объявили параметр IN, почему бы вам не использовать его? Он здесь для того, чтобы передать процедуре, а не принимать ее во время выполнения (что вы и планировали сделать, поставив перед ее именем двоеточие).
- кроме того, это хорошая идея, чтобы отличить имя параметра от имени столбца, в противном случае у вас возникнут проблемы, поскольку Oracle не будет знать, что есть что. Вот почему я переименовал его в
par_reservation_id
select
в PL / SQL требует условие into
. В вашем случае вам нужно объявить все те переменные, которые соответствуют select
списку столбцов. Я назвал их всех с префиксом l_
(как переменная l_ ocal);некоторые люди используют v_
;выберите то, что вы хотите, просто попробуйте придерживаться некоторых стандартов - это облегчит чтение, отладку и поддержку вашего кода select
, который вы написали, вероятно, вернет too_many_rows ошибка, поскольку количество строк не ограничено;Я предполагаю, что вы «забыли» включить предложение where
, поэтому я поместил его туда;Я не знаю, правильно это или нет, потому что у меня нет твоих столов. Исправьте это, если необходимо - при объединении таблиц, попробуйте переключиться на современный синтаксис ANSI и отделить объединений от (
where
) условий , как я пытался - , если вы не запускаете этот код в инструменте, который поддерживает
dbms_output
для отображения на экране, вы ничего не увидите. Исключение составляет , обработано (вроде), но никто не узнает, что произошлоПопробуйте вместо этого поднять ошибку, например, raise_application_error(-20000, 'No services for this reservation')
Вот как может выглядеть процедура;надеюсь, это несколько лучше, чем оригинальная версия. Посмотрите, поможет ли это.
Create or replace procedure
Reservation_Services_Report (par_reservation_ID IN number)
As
l_service_name services.service_name%type;
l_service_type services.service_type%type;
l_service_type_Food services.service_type_Food%type;
l_service_type_entertainment services.service_type_entertainment%type;
l_numb_people_attend reservation.numb_people_attend%type;
Begin
Select s.service_name,
s.service_type,
s.service_type_food,
s.service_type_entertainment,
r.numb_people_attend
into l_service_name,
l_service_type,
l_service_type_food,
l_service_type_entertainment,
l_numb_people_attend
from services s join reservation r on s.service_type_id = r.service_type_id
where r.reservation_id = par_reservation_id;
Exception
When no_data_found then
dbms_output.put_line(‘No services for this reservation’);
End;