mysql cursor 에러 0 1 2,245

by dber [MySQL] cursor 커서 [2017.05.04 10:38:18]


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가 닫힌건지 잘 모르겠습니다. 고수님들께 여쭤봅니다,,,

by 주킹 [2017.05.10 10:44:25]

leave loop2를 하기 전에 close c2;를 할 필요가 없어보입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입