ここでの目標は、ループ内でネストされたカーソルを実行して、セクション名と番号、そのセクション内のすべての人物を表示することです。SQLエラー - カーソルが不正または不完全です
最初にコード。ここで
SET SERVEROUTPUT ON SIZE 4000
DECLARE
search VARCHAR2(20) := 'Summer 2007';
CURSOR cur_class IS
SELECT call_id, sec_num, c_sec_id
FROM course_section
INNER JOIN course ON course_section.course_id = course.course_id
INNER JOIN term ON course_section.term_id = term.term_id
WHERE term.term_desc = search
ORDER BY course.call_id;
f_cur cur_class%ROWTYPE;
CURSOR cur_students IS
SELECT c_sec_id, s_first, s_last
FROM enrollment
INNER JOIN student ON enrollment.s_id = student.s_id
INNER JOIN course_section ON enrollment.c_sec_id = course_section.c_sec_id
WHERE enrollment.c_sec_id IS NOT NULL;
f_cur_stu cur_students%ROWTYPE;
BEGIN
OPEN cur_class;
LOOP
FETCH cur_class INTO f_cur;
EXIT WHEN cur_class%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(f_cur.call_id || ' Sec. ' || f_cur.sec_num);
FOR f_cur_stu IN cur_students LOOP
IF f_cur.c_sec_id = f_cur_stu.c_sec_id THEN
DBMS_OUTPUT.PUT_LINE(f_cur_stu.s_first || ' ' || f_cur_stu.s_last);
END IF;
END LOOP;
END LOOP;
CLOSE cur_class;
END;
エラーメッセージです:
Error report:
ORA-06550: line 16, column 11:
PL/SQL: ORA-00918: column ambiguously defined
ORA-06550: line 12, column 5:
PL/SQL: SQL Statement ignored
ORA-06550: line 11, column 10:
PLS-00341: declaration of cursor 'CUR_STUDENTS' is incomplete or malformed
ORA-06550: line 17, column 13:
PL/SQL: Item ignored
ORA-06550: line 26, column 29:
PLS-00364: loop index variable 'F_CUR_STU' use is invalid
ORA-06550: line 26, column 9:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
私は全体の2番目のカーソルの作成とネストされたループをコメントアウトした場合、最初のループは、必要に応じて私のためにセクション名と番号を一覧表示、動作します。
問題は、2番目のカーソルcur_studentsを試したときに発生します。私はどのようにカーソルが不正な/不完全で、私はそれを完了するために何ができるのか分からない。私は他のWHERE句を試しましたが、それは常に同じことです。
ありがとう、コメントありがとうございました!私はテーブル構造をアップロードしましたが、それは以下のように答えたfg78ncでした。しかし、なぜ私はc_sec_idが登録テーブルに存在しなかったかもしれないと示唆したのか分かります。ご協力いただきありがとうございます。 – GrossMisconduct