sql >> データベース >  >> RDS >> Oracle

エラー:割り当てのターゲットとしてカウンタを参照してください-PL / SQL

    以前の回答を変更して、コメントで試みたと述べたパスカルの三角形を実際に作成します。

    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を実行しているだけです 本当に。



    1. 再帰的な結果のためのLaravelクエリビルダー?例えば。 id、parent_id

    2. 行のMySQLフィールドの数を数える(または空にする)

    3. MySQLで複数のフィールドを並べ替える

    4. PHP、MYSQL、テーブルソーター付きのHTMLテーブル