Прежде всего, необходимо добавить предложение INTO
, чтобы вернуть значения столбцов
CREATE OR REPLACE PROCEDURE PRC_Enrollment AS
v_course_no course.course_no%type;
v_description course.description%type;
v_section_no section.section_no%type;
v_count_enrl int;
BEGIN
SELECT c.course_no, c.description, s.section_no, e.countofenrollment
INTO v_course_no, v_description, v_section_no , v_count_enrl
FROM course c
JOIN section s
ON c.course_no = s.course_no
JOIN (SELECT section_id, COUNT(*) countofenrollment
FROM enrollment
GROUP BY section_id) e
ON s.section_id = e.section_id
WHERE e.countofenrollment < 6;
EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
END;
/
В качестве альтернативы вы можете вернуть эти значения как параметры out, используя вместо этого
CREATE OR REPLACE PROCEDURE PRC_Enrollment(
v_course_no out course.course_no%type,
v_description out course.description%type,
v_section_no out section.section_no%type,
v_count_enrl out int
) AS
возвращать их как локальные переменные, как в первом случае.
- псевдоним ваших таблиц с буквой, обычно предпочитается первая буква таблиц
- добавить обработку исключений, по крайней мере, против если не найдены данные, чтобы не получить ошибку
Кстати, вы получите такую ошибку , если OR REPLACE
не было добавлено после ключевого слова CREATE
для второй и последующие сборники.