MySQL存储过程打印20到1个*时出现列名输出,如何解决?
问题
需求是打印20个*,接着19个,直至1个。编写的MySQL存储过程代码如下:
delimiter $$ create procedure test() begin set @ans = 20; while(@ans>0) do select repeat('*',@ans); set @ans = @ans - 1; end while; end $$ delimiter ; call test();
该存储过程实现了功能,但每次输出*的行后都会显示(repeat('*',@ans))列名,请问问题出在哪里?
原因及解决办法
原因
你执行select repeat('*',@ans)时,没有给生成的列指定别名,MySQL会默认把整个表达式repeat('*',@ans)作为列名显示,这就是你看到那串文字的原因。
解决办法
给查询的列指定空别名或自定义别名,就能替换默认的表达式列名:
- 使用空别名(可隐藏列名,不同客户端显示效果略有差异):
delimiter $$ create procedure test() begin set @ans = 20; while(@ans>0) do select repeat('*',@ans) as ``; -- 两个反引号包裹空内容 set @ans = @ans - 1; end while; end $$ delimiter ;
- 使用自定义短别名(比如用
stars作为列名):
delimiter $$ create procedure test() begin set @ans = 20; while(@ans>0) do select repeat('*',@ans) as stars; set @ans = @ans - 1; end while; end $$ delimiter ;
内容的提问来源于stack exchange,提问作者Musaib Muneer
相关产品推荐
相关产品推荐

