mysql - 我的游标程序不起作用

标签 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

当我执行它时,sql 管理器输出:

Incorrect number of FETCH variables

我不明白为什么。

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

谢谢

最佳答案

您在游标查询中只选择了一列并将数据提取到 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

关于mysql - 我的游标程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303200/

相关文章:

php - 如何使用 LAMP 实现 "share with network"功能

PostgreSQL、Pl/pgsql - 如何访问执行我所在的存储过程的查询字符串?

asp.net - 如何在 SQL Server 存储过程中用逗号分隔(分割)字符串

c# - C# 存储过程调用、参数嗅探/优化问题的巨大减速?

c# - 我可以不拖动存储过程,而是将其名称剪切并粘贴到某处吗?

MySQL IF 触发错误

mysql - 选择不同行中符合条件的记录

php - 在 laravel 的表单更新中得到 302

MySQL存储过程用游标查找所有错误日期值

javascript - 无法从服务器中的 php 调用 Ajax 函数