Modificando las respuestas anteriores para darte el triángulo de Pascal, que mencionaste que estabas intentando en un comentario:
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 su dbms_output.put_line
las llamadas debían ser solo dbms_output.put
, ya que estaba imprimiendo cada *
en una línea por su cuenta. Pero sí necesita un salto de línea después de cada vez alrededor del a
bucle, por lo que agregué un dbms_output.newline
al final de eso. También estabas disminuyendo temp
dentro de la b
bucle, lo que significaba que era cero en lugar de (n-1)
por segunda vez alrededor del a
círculo; pero realmente no necesitas un temp
separado variable en absoluto, ya que siempre es lo mismo que (n-a)+1
y el +1
simplemente pone un espacio extra en cada línea. (También hice el a
bucle 1..n
como asumo que desea cambiar el valor de n
después en un solo lugar). Con n := 8
:
*
***
*****
*******
*********
***********
*************
***************
Sin embargo, es crucial que también tenga que set serveroutput on format wrapped
, de lo contrario, los espacios iniciales que está generando en el b
bucle se descartan.
También puede hacer esto en SQL simple, aunque debe proporcionar el 5
dos veces, o use una variable de vinculación o sustitución:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
Tu b
y c
los bucles solo están haciendo un lpad
manual de verdad.