带有游标的 MySQL 存储过程

Posted

技术标签:

【中文标题】带有游标的 MySQL 存储过程【英文标题】:MySQL stored procedure with a cursor 【发布时间】:2019-04-23 15:19:22 【问题描述】:

我想从表“redis-state”中获取表中带有光标的数据并编写了这个程序,但是我得到了一个错误

声明未找到 1064 错误代码

在第 10 行。

目的是打印表格的所有行。表格中的每个条目打印一次。

[![在此处输入图片描述][2]][2]

    CREATE PROCEDURE redisatestatedata()
    BEGIN 
     DECLARE macaddress varchar(50);
     DECLARE redisstate varchar(50);
     DECLARE atehistorystate varchar(50);
     DECLARE data_list varchar(50000);
     DECLARE done INT DEFAULT FALSE;

     DECLARE data_cursor CURSOR FOR  
      SELECT macaddress,redisstate,atehistorystate 
      FROM redis-atestate;

       DECLARE CONTINUE HANDLER FOR NOT FOUND
         SET done = TRUE;
         open data_cursor;
     GET_DATA:loop FETCH data_cursor INTO 
          macaddress,redisstate,atehistorystate;

     IF v_finished = 1 THEN 
        leave get_data;
     ENDIF;

 SET data_list = concat("Difference in state ATE:",macaddress,": redis ",redisstate,": dbstate ",atehistorystate);

    SELECT data_list;
   loop get_data;
  CLOSE data_cursor;
END;

【问题讨论】:

对不起,我尝试添加有问题的代码但没有成功,所以粘贴图像 您可以通过复制粘贴的方式添加您的代码,然后选择它并按ctrl+k(或编辑框上方的 符号)。还请添加准确(和完整)的错误消息,包括引用您的代码的部分,因为它将直接显示错误的位置。这(错误消息和代码作为文本)使我们能够更快地识别语法问题,例如未引用的表名。 【参考方案1】:

我认为问题在于这句话:

DECLARE done INT DEFAULT FALSE;

您正在尝试将默认值 false 分配给数据类型 INT?

【讨论】:

以上是关于带有游标的 MySQL 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 存储过程,获取使用游标查询的结果集

mysql存储过程 游标双重循环

MySql数据库的存储过程能返回游标么?

mysql 存储过程,游标总是多读一行,泪奔求助

mysql之——存储过程 + 游标 + 事务

MySQL的存储过程存储过程的变量存储过程的传参流程控制游标