DELIMITER $$ DROP PROCEDURE IF EXISTS grading; CREATE PROCEDURE grading() BEGIN DECLARE finished1 boolean DEFAULT false; DECLARE x_id VARCHAR(5); DECLARE x_name VARCHAR(20); DECLARE x_dept_name varchar(20); DECLARE x_tot_cred varchar(3); DECLARE x_course_id varchar(8); DECLARE x_semester varchar(8); DECLARE x_year numeric(4,0); DECLARE x_grade numeric(3,2); DECLARE c1 CURSOR FOR SELECT ID, dept_name, name, tot_cred FROM student; DECLARE c2 CURSOR FOR SELECT course_id, semester, year, grade FROM takes WHERE ID=x_id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished1 := true; OPEN c1; loop1: LOOP FETCH c1 INTO x_id, x_dept_name, x_name, x_tot_cred; IF finished1 then CLOSE c1; LEAVE loop1; END IF; SELECT Concat(ifnull(x_dept_name, ''),' : ', ifnull(x_name, '')) as 'dept_name : name'; OPEN c2; loop2: LOOP FETCH c2 into x_course_id, x_semester, x_year, x_grade; IF finished1 then SET finished1 := false; CLOSE c2; LEAVE loop2; END IF; SELECT Concat(ifnull(x_course_id, ''),' : ', ifnull(x_semester, ''),' : ',ifnull(x_year, ''),' : ',ifnull(x_grade, '')) as 'course_id : semester : year : grade'; END LOOP loop2; CLOSE c2; SELECT Concat(ifnull(x_tot_cred, ''),' : ', ifnull(x_grade, '')) as 'tot_cred : avg_grade'; END LOOP loop1; CLOSE c1; END;$$
===================================================
프로시저를 정의하고 call grading()$$ 을 하면 cursor is not open 에러가 납니다..
어디서 cursor가 닫힌건지 잘 모르겠습니다. 고수님들께 여쭤봅니다,,,