【问题标题】:SQL procedure print cursorSQL 过程打印游标
【发布时间】:2020-07-14 18:59:17
【问题描述】:

我有一个 sql 过程,它有这个游标声明语句

DECLARE cur1 CURSOR FOR  SELECT count(value1), value1
FROM someDB.table1
INNER JOIN someDB.table2 ON table1.Id=table2.Id and 
A_code = input_code1;
AND B_code = input_code2
GROUP BY value1
  ORDER BY count(value1) desc
LIMIT 5;


OPEN cur1;
read_loop: LOOP 
FETCh cur1 INTO value2,value1;
set value = CONCAT(value2,' ',value1);

  select 'loop start';
  select value;
  -- for now, I'm just trying to print but here I'll have an insert statement 

 IF done THEN
      LEAVE read_loop;
    END IF;

select 语句确实可以完美地返回值,但是当我尝试在表中插入值时,它说 value1 不能为 null,当我刚刚运行 select 语句时该值不为 null 不确定为什么这个值在光标。有人可以帮助我在此缺少什么

【问题讨论】:

  • 你必须声明变量或使用用户变量@value1
  • 这里我没有提到,但是我已经声明了一切,我想我主要关心的是为什么选择语句没有在游标中设置值?
  • 您必须添加完整的程序,我们还需要对其进行测试,您的表格和一些数据。或者尝试自己调试一下,添加一个会话变量,看看运行过程后你得到了什么数据你可以选择@a,看看你得到了什么。
  • 酷,让我尝试使用 select @ 进行调试 :)
  • 对你超级好

标签: mysql stored-procedures cursor


【解决方案1】:

问题是我为游标声明的变量名与表中的列名相同, 所以我开始调试,看到游标的值变为空,我开始更改变量的名称,它解决了问题。看起来 MySQL 有一个冲突,变量名称不能与表列名称相同。

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多