2017-01-01 184 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需要指定長度。
  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