我有一个带有几个游标的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打印的最佳方法是什么?
您正在使用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;