Промяна на предишните отговори, за да ви даде действително триъгълника на Паскал, който споменахте, че опитвате в коментар:
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 наистина.