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.