Oracle
 sql >> Baza danych >  >> RDS >> Oracle

BŁĄD:Odwołaj się do licznika jako celu przypisania — PL/SQL

Modyfikując poprzednie odpowiedzi, aby faktycznie uzyskać trójkąt Pascala, o którym wspomniałeś w komentarzu:

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.

Zarówno Twój dbms_output.put_line wywołania muszą być po prostu dbms_output.put , ponieważ to było drukowanie każdego * na osobnej linii. Ale potrzebujesz łamania wiersza za każdym razem wokół a pętla, więc dodałem dbms_output.newline na końcu tego. Zmniejszałeś także temp wewnątrz b pętla, co oznaczało zero zamiast (n-1) po raz drugi w okolicach a pętla; ale tak naprawdę nie potrzebujesz oddzielnego temp w ogóle zmienna, ponieważ jest zawsze taka sama jak (n-a)+1 i +1 po prostu zapewnia dodatkową przestrzeń na każdej linii. (Zrobiłem też a pętla 1..n ponieważ zakładam, że chcesz zmienić wartość n później tylko w jednym miejscu). Z n := 8 :

       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************

Co najważniejsze, musisz także set serveroutput on format wrapped , w przeciwnym razie wiodące spacje, które generujesz w b pętle są odrzucane.

Możesz to również zrobić w zwykłym SQL, ale musisz podać 5 dwa razy lub użyj zmiennej wiążącej lub zastępującej:

select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5

PASCAL
------------------------------
    *
   ***
  *****
 *******
*********

Twój b i c pętle po prostu wykonują ręczny lpad naprawdę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łączysz się jednocześnie z SQL Server, Oracle, DB2 i MySQL za pomocą ADO.NET?

  2. Czy istnieje sposób na ponowne połączenie puli połączeń JBoss z Oracle, gdy połączenia się zepsują?

  3. Wyłączenie skryptu SQL*Plus

  4. Jak korzystać z polecenia buforowania w Oracle Developer SQL?

  5. Czy można opisać tabelę i najpierw wyświetlić kolumny NOTNULL?