我的光标程序不起作用

Jar*_*rab 5 mysql stored-procedures

我有下一个程序:

BEGIN
  DECLARE retribAn INTEGER DEFAULT 0; 
  DECLARE cPost INTEGER(11);     
  DECLARE done INT DEFAULT 0;
  DECLARE curTipo CURSOR FOR
          SELECT RETRIBUCION_ANUAL*1.05 AS RET_AN
          FROM EMPLEADOS  
          WHERE ID_CPOSTAL%2=0;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
  OPEN curTipo;
  REPEAT
    FETCH curTipo INTO retribAn, cPost;
    IF NOT done THEN       
      UPDATE EMPLEADOS 
      SET RETRIBUCION_ANUAL=retribAn  
      WHERE ID_CPOSTAL%cPost;  
    END IF;
  UNTIL done END REPEAT;
  CLOSE curTipo;    
END
Run Code Online (Sandbox Code Playgroud)

当我执行它时,sql manager 输出:

FETCH 变量的数量不正确

我不理解为什么。

我是mysql的菜鸟=D,对不起我的英语。

谢谢

rs.*_*rs. 5

您仅在游标查询中选择一列并将数据提取到 FETCH 中的两个变量中

尝试这个

BEGIN
  DECLARE retribAn INTEGER DEFAULT 0; 
  DECLARE cPost INTEGER(11);     
  DECLARE done INT DEFAULT 0;
  DECLARE curTipo CURSOR FOR
          SELECT RETRIBUCION_ANUAL*1.05 AS RET_AN
          FROM EMPLEADOS  
          WHERE ID_CPOSTAL%2=0;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
  OPEN curTipo;
  REPEAT
    FETCH curTipo INTO retribAn; --remove cPost here
    IF NOT done THEN       
      UPDATE EMPLEADOS 
      SET RETRIBUCION_ANUAL=retribAn  
      WHERE ID_CPOSTAL%cPost = 0;  --change this to value you want to check
    END IF;
  UNTIL done END REPEAT;
  CLOSE curTipo;    
END
Run Code Online (Sandbox Code Playgroud)