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.