Oracle
 sql >> база данни >  >> RDS >> Oracle

ГРЕШКА:Позоваване на брояча като цел на присвояване - PL/SQL

Промяна на предишните отговори, за да ви даде действително триъгълника на Паскал, който споменахте, че опитвате в коментар:

set serveroutput on format wrappeddeclare n number(2):=5;begin for a in 1..n loop for b in 1..n-a loop dbms_output.put(' '); крайна линия; за c в 1..2*a-1 цикъл dbms_output.put('*'); крайна линия; dbms_output.new_line; end loop;end;/ * *** ***** ****************PL/SQL процедурата е завършена успешно. 

И двете ви dbms_output.put_line извикванията трябваше да бъдат само dbms_output.put , тъй като това отпечатваше всеки * на собствена линия. Но имате нужда от нов ред след всеки път около a цикъл, така че добавих dbms_output.newline в края на това. Вие също намалявахте temp вътре в b цикъл, което означаваше, че е нула вместо (n-1) за втори път около a цикъл; но всъщност не се нуждаете от отделен temp променлива изобщо, тъй като това винаги е същото като (n-a)+1 и +1 просто поставя допълнителен интервал на всеки ред. (Направих и a цикъл 1..n тъй като предполагам, че искате да промените стойността на n по-късно само на едно място). С n :=8 :

<предварителен код> * *** ***** ******* ********* *********** ******** ********************

От решаващо значение обаче трябва да настроите изхода на сървъра във формат обвит , в противен случай водещите интервали, които генерирате в b цикъл се отхвърлят.

Можете също да направите това в обикновен SQL, въпреки че трябва да предоставите 5 два пъти или използвайте свързваща или заместваща променлива:

изберете lpad(' ', 5 - ниво, ' ') || rpad('*', (ниво * 2) - 1, '*') като pascalfrom dualconnect от ниво <=5PASCAL------------------------------ ------ * *** ***** **************** 

Вашият b и c циклите просто правят ръчно lpad наистина.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. if (изберете брой (колона) от таблица)> 0 тогава

  2. Oracle еквивалент на Varargs на Java

  3. Защо получавам ORA-00932:непоследователни типове данни:очаквано - получено - когато използвам COLLECT() в подготвен израз?

  4. SQL - Преброяване на промените в подреден списък

  5. Как да намерите компонентите на EBS R12 Версия