Ваше условие IF зависит от двух переменных, которые вы не заполняете. Предположительно эти значения взяты из таблиц STUDENT и CLASS. Поэтому я думаю, что вам нужно сначала выбрать соответствующие записи, а затем оценить условие IF.
Примерно так:
create or replace procedure enroll_student2
(p_stu_ID number,p_class_id number)
as
l_stu_standing number;
l_course_standing number;
begin
select s.stu_standing
into l_stu_standing
from student s
where s.stu_id = p_stu_id;
select c.course_standing
into l_course_standing
from class_sched cs
inner join course c on c.course_id = cs.course_id
where c.class_id = p_class_id;
if l_stu_standing >= l_course_standing then
insert into enroll (stu_ID, class_id)
values (p_stu_id, p_class_id);
else
dbms_output.put_line('Requirement not met');
end if;
end;
/
Примечание: вы не опубликовали свою модель данных, поэтому я взялнекоторые предположения: следовательно, вам может понадобиться исправить ошибки компиляции. Также я не включил обработку ошибок для очевидных потенциальных исключений (NO_DATA_FOUND, TOO_MANY_ROWS и т. Д.), Которые вы, вероятно, должны включить.
Вам не нужно DECLARE, фактически вы получите ошибку компиляции. Это требуется для анонимных блоков, но для именованных процедур и функций ключевое слово AS (или IS) обозначает начало раздела объявления. (Это распространенная ошибка для людей, начинающих с PL / SQL, и, честно говоря, это кажется несовместимым с объявлением триггеров.)
Наконец, помните, что использование DBMS_OUTPUT для сообщения о сбое программы не является надежной тактикой,Бесполезно, если пользователь работает с отключенным SERVEROUTPUT или когда другая программа вызывает эту.