Memodifikasi jawaban sebelumnya untuk benar-benar memberi Anda segitiga Pascal, yang Anda sebutkan sedang Anda coba dalam komentar:
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.
Baik dbms_output.put_line . Anda panggilan hanya perlu dbms_output.put , karena itu mencetak setiap * pada baris tersendiri. Tetapi Anda memang membutuhkan jeda baris setelah setiap kali di sekitar a loop, jadi saya telah menambahkan dbms_output.newline di akhir itu. Anda juga mengurangi temp di dalam b loop, yang berarti nol, bukan (n-1) untuk kedua kalinya di sekitar a lingkaran; tetapi Anda tidak benar-benar membutuhkan temp yang terpisah variabel sama sekali karena itu selalu sama dengan (n-a)+1 dan +1 hanya menempatkan ruang ekstra di setiap baris. (Saya juga membuat a loop 1..n karena saya berasumsi Anda ingin mengubah nilai n nanti di satu tempat saja). Dengan n := 8 :
*
***
*****
*******
*********
***********
*************
***************
Yang terpenting, Anda juga harus set serveroutput on format wrapped , jika tidak, spasi utama yang Anda hasilkan di b loop dibuang.
Anda juga dapat melakukan ini dalam SQL biasa, meskipun Anda harus menyediakan 5 dua kali, atau gunakan variabel ikat atau substitusi:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
b . Anda dan c loop hanya melakukan lpad manual sungguh.