Bri*_*ght 12 mysql stored-procedures
我有一个带有几个游标的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;
Run Code Online (Sandbox Code Playgroud)
我试过了:
SET _output = _output + _ID
Run Code Online (Sandbox Code Playgroud)
和
SET _output = CONCAT(_output,_ID)
Run Code Online (Sandbox Code Playgroud)
但他们都只返回NULL
SET _output = _ID;只是给我最后一行.哪个有用但不完全是我想要的.
将每个获取的行输出到屏幕以在MySQL存储过程中重现MySQL打印的最佳方法是什么?
小智 17
您正在使用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;
| 归档时间: |
|
| 查看次数: |
77674 次 |
| 最近记录: |