我有一个mysql存储过程,其中有一些游标。我想打印一个值,将输出发送回客户机。SQLyog Enterprise
我尝试将变量声明为文本并在循环中连接,但这不起作用,至少不像我尝试的那样。
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)
但它们都只是返回空值
SET _output = _ID;
只给我最后一行。这是有帮助的,但不完全是我想要的。在mysql存储过程中,将每个提取的行输出复制到屏幕上,最好的方法是什么?
最佳答案
您使用select _输出进行的操作是正确的;没有into子句选择的任何内容都将返回给客户机。
要获得所有这些元素,您可以将select移动到循环中(单独打印每个元素),或者将它们合并在一起。concat返回空值的问题是,您没有将输出初始化为任何内容,所以它是空的。结束任何具有空值的内容都将返回空值。
请尝试以下操作:
声明“输出文本默认值”';
declare _id int默认值0;
从codeid中为select id声明cur1光标;
声明未找到的继续处理程序set done=1;
打开cur1;
重复
取cur1到_id;
如果没有,那么
设置_output=concat(“,”,_id);/*参见下面的alt*/
结束if;
直到结束重复;
关闭cur1;
选择输出;