Modificando as respostas anteriores para realmente fornecer o triângulo de Pascal, que você mencionou que estava tentando em um comentário:
set serveroutput on format wrapped
declare
n number(2):=5;
begin
for a in 1..n loop
for b in 1..n-a loop
dbms_output.put(' ');
end loop;
for c in 1..2*a-1 loop
dbms_output.put('*');
end loop;
dbms_output.new_line;
end loop;
end;
/
*
***
*****
*******
*********
PL/SQL procedure successfully completed.
Tanto seu
dbms_output.put_line
as chamadas precisavam ser apenas dbms_output.put
, pois estava imprimindo cada *
em uma linha por conta própria. Mas você precisa de uma quebra de linha após cada vez em a
loop, então adicionei um dbms_output.newline
no final disso. Você também estava diminuindo temp
dentro do b
loop, o que significava que era zero em vez de (n-1)
pela segunda vez no a
ciclo; mas você realmente não precisa de um temp
separado variável, pois é sempre igual a (n-a)+1
e o +1
apenas coloca um espaço extra em cada linha. (Eu também fiz o a
loop 1..n
como eu suponho que você deseja alterar o valor de n
mais tarde em apenas um lugar). Com n := 8
: *
***
*****
*******
*********
***********
*************
***************
Crucialmente, porém, você também precisa
set serveroutput on format wrapped
, caso contrário, os espaços iniciais que você está gerando no b
loop são descartados. Você também pode fazer isso em SQL simples, embora precise fornecer o
5
duas vezes, ou use uma variável de ligação ou substituição:select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
Seu
b
e c
loops estão apenas fazendo um lpad
manual verdade.