MYSQL常见问题打印'*' 20,19...1次

pepwfjgg  于 2023-03-28  发布在  Mysql
关注(0)|答案(2)|浏览(143)

我们需要打印'*' 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))。我做错了什么?

7lrncoxx

7lrncoxx1#

这是你想要的吗
您可以添加您想要的别名在这个例子中它的*

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();
wfveoks0

wfveoks02#

你的存储过程执行了一个select语句20次,每个select语句都有自己的 result-set,所以这就是你所说的原因:* 打印(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

see demo

相关问题