当前位置:  开发笔记 > 后端 > 正文

如何在MySQL存储过程中模拟打印

如何解决《如何在MySQL存储过程中模拟打印》经验,为你挑选了1个好方法。

我有一个带有几个游标的MySQL存储过程.我想打印一个值来将输出发送回客户端.SQLyog企业版.

我尝试将变量声明为TEXT并在循环内部连接,但这不起作用,至少不是我尝试这样做的方式.

DECLARE _output TEXT;
DECLARE _ID INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;

REPEAT
  FETCH cur1 INTO _ID;
  IF NOT done THEN
    SET _output = _ID; /*SEE ALT BELOW*/

  END IF;
UNTIL done END REPEAT;
CLOSE cur1;

SELECT _output;

我试过了:

SET _output = _output + _ID

SET _output = CONCAT(_output,_ID)

但他们都只返回NULL

SET _output = _ID;只是给我最后一行.哪个有用但不完全是我想要的.

将每个获取的行输出到屏幕以在MySQL存储过程中重现MySQL打印的最佳方法是什么?



1> 小智..:

您正在使用SELECT _output正确执行此操作; 在没有INTO子句的情况下选择的任何内容都将返回给客户端.

要获得所有这些,您可以将SELECT移动到循环中(单独打印每个),或者您可以将它们连接在一起.你的concat返回NULL的问题是因为你没有将_output初始化为任何东西,所以它是NULL.使用NULL绑定任何内容将返回NULL.

请尝试以下方法:

DECLARE _output TEXT DEFAULT '';
DECLARE _ID INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;

REPEAT
  FETCH cur1 INTO _ID;
  IF NOT done THEN
    SET _output = CONCAT(",", _ID); /*SEE ALT BELOW*/

  END IF;
UNTIL done END REPEAT;
CLOSE cur1;

SELECT _output;


不应该是`SET _output = CONCAT(_output,",",_ ID);`否则它只有最后一个ID
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有