2017-01-01 16 views
0

PHPMyAdminとMySQLの使用。 私はルーチンを追加しようとしています。MySQL PHPMyAdmin - ルーチンエラー

BEGIN 
DECLARE cursor_ID INT; 
    DECLARE cursor_VAL VARCHAR; 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE cursor_i CURSOR FOR SELECT ca.apprentice_id, c.courseNumber, c.level FROM tblcourseassignments ca LEFT JOIN tblcourses c ON ca.course_id = c.id; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    DECLARE varc1 INT DEFAULT 0; 
    DECLARE varc2 INT DEFAULT 0; 
    DECLARE varc3 INT DEFAULT 0; 
    DECLARE gradeCount INT; 

    OPEN cursor_i; 
    read_loop: LOOP 
    FETCH cursor_i INTO varc1, varc2; 
    SELECT COUNT(id) INTO gradeCount FROM tblapprenticegrades WHERE apprentice_id = varc1 and course_id = varc2; 

    if gradeCount = 0 then 
     INSERT INTO tblapprenticegrades(apprentice_id, course_id, phase) VALUES (varc1, varc2, varc3); 
    end if 

    IF done THEN 
     LEAVE read_loop; 
    END IF; 
    --queries which couldnt be made into set based queries go here--- 
    END LOOP; 
    CLOSE cursor_i; 
END; 

しかし、私はこのエラーを取得し続ける:

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; DECLARE done INT DEFAULT FALSE; DECLARE cursor_i CURSOR FOR SELECT ca.ap' at line 3

答えて

0

あなたのコードで行わ修正を見つけてください。

  1. Varcharにはlengthを指定する必要があります。
  2. 宣言の末尾にカーソルとハンドラ宣言を指定する必要があります。
  3. 構文エラーがあります。

BEGIN 
DECLARE cursor_ID INT; 
    DECLARE cursor_VAL VARCHAR(100); /* Varchar length */ 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE varc1 INT DEFAULT 0; 
    DECLARE varc2 INT DEFAULT 0; 
    DECLARE varc3 INT DEFAULT 0; 
    DECLARE gradeCount INT; 
    /* cursor and handler declaration at the end of declarations */ 
    DECLARE cursor_i CURSOR FOR SELECT ca.apprentice_id, c.courseNumber, c.`level` FROM tblcourseassignments ca LEFT JOIN tblcourses c ON ca.course_id = c.id; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    OPEN cursor_i; 
    read_loop: LOOP 
    FETCH cursor_i INTO varc1, varc2; 
    SELECT COUNT(id) INTO gradeCount FROM tblapprenticegrades WHERE apprentice_id = varc1 and course_id = varc2; 

    if gradeCount = 0 then 
     INSERT INTO tblapprenticegrades(apprentice_id, course_id, phase) VALUES (varc1, varc2, varc3); 
    end if; /* semicolon here */ 

    IF done THEN 
     LEAVE read_loop; 
    END IF; 
    --queries which couldnt be made into set based queries go here--- 
    END LOOP; 
    CLOSE cursor_i; 
END 
関連する問題