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

时间:2009-03-09 17:36:00

标签: stored-procedures mysql

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

我尝试将变量声明为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 个答案:

答案 0 :(得分:15)

您正在使用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;