以前の回答を変更して、コメントで試みたと述べたパスカルの三角形を実際に作成します。
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.
両方のdbms_output.put_line 呼び出しはdbms_output.putである必要がありました 、各*を印刷していたので 単独で回線上。ただし、aの前後で毎回改行する必要があります ループなので、dbms_output.newlineを追加しました その終わりに。 tempもデクリメントしていました b内 ループ。これは、(n-1)ではなくゼロであることを意味します。 aの周りで2回目 ループ;ただし、個別のtempは実際には必要ありません。 変数は常に(n-a)+1と同じです。 および+1 すべての行に余分なスペースを置くだけです。 (aも作成しました ループ1..n nの値を変更したいと思います 後で1か所のみ)。 n := 8の場合 :
*
***
*****
*******
*********
***********
*************
***************
重要なのは、set serveroutput on format wrappedことも必要です。 、それ以外の場合は、bで生成している先頭のスペース ループは破棄されます。
5を指定する必要がありますが、プレーンSQLでもこれを行うことができます。 2回、またはバインド変数または置換変数を使用します:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
あなたのb およびc ループは手動のlpadを実行しているだけです 本当に。