我们必须打印 20 次“*”,然后打印 19 次,依此类推,直到我们只打印 1 次!
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))
。我做错了什么?
这是你想要的吗:
You can add you want in this example its
*
delimiter $$
create procedure test()
begin
set @ans = 20;
while(@ans>0) do
select repeat('*',@ans) as '*';
set @ans = @ans - 1;
end while;
end $$
delimiter ;
call test();
您的存储过程执行 select 语句 20 次,每个 select 语句都有自己的 result-set,所以这就是导致您所说的原因:printing (repeat('*',@ans)) 在每个相应的字符之后线.
相反,您可以使用变量来存储 while 循环内的填充字符串,然后在循环外选择该变量。
create procedure test()
begin
set @ans = 20;
set @res = '';
while(@ans>0) do
set @res= concat(@res , repeat('*',@ans), '\n'); -- you may replace '\n' with any other delimiter.
set @ans = @ans - 1;
end while;
select @res as test_result;
end