Mon but ici est d'avoir un curseur imbriqué s'exécutant dans les boucles, de sorte qu'il affiche un nom et un numéro de section, puis toutes les personnes dans cette section.Erreur SQL - Curseur mal formé ou incomplet
D'abord, le code.
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;
Voici le message d'erreur:
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:
Si je commente sur toute la seconde création du curseur et la boucle imbriquée, les premiers travaux de la boucle, la liste pour moi le nom de la section et le numéro comme vous le souhaitez.
Le problème se produit lorsque j'essaie le deuxième curseur, cur_students. Je ne sais pas comment le curseur est mal formé/incomplet et ce que je peux faire pour le compléter. J'ai essayé d'autres clauses WHERE et c'est toujours la même chose.
EDIT: Une image de la structure de la table:
Salut, merci pour le commentaire! J'ai téléchargé la structure de la table, mais c'était comme fg78nc répondu ci-dessous. Mais je peux voir pourquoi vous avez suggéré que c_sec_id n'existait pas dans la table d'inscription. Merci pour votre aide et votre temps. – GrossMisconduct