De vorige antwoorden aanpassen om je de driehoek van Pascal te geven, waarvan je in een opmerking zei dat je het probeerde:
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.
Zowel uw dbms_output.put_line oproepen moesten gewoon dbms_output.put . zijn , want dat was het afdrukken van elke * op zijn eigen lijn. Maar je hebt wel een regeleinde nodig na elke keer rond de a loop, dus ik heb een dbms_output.newline . toegevoegd aan het einde daarvan. Je verlaagde ook temp binnen de b lus, wat betekende dat het nul was in plaats van (n-1) voor de tweede keer rond de a lus; maar je hebt niet echt een aparte temp nodig variabele, want dat is altijd hetzelfde als (n-a)+1 en de +1 zet gewoon een extra spatie op elke regel. (Ik heb ook de a . gemaakt loop 1..n aangezien ik aanneem dat je de waarde van n . wilt wijzigen later op slechts één plaats). Met n := 8 :
*
***
*****
*******
*********
***********
*************
***************
Cruciaal is echter dat je ook set serveroutput on format wrapped , anders de voorloopspaties die u genereert in de b loop worden verwijderd.
U kunt dit ook in gewone SQL doen, hoewel u de 5 . moet opgeven twee keer, of gebruik een bind- of vervangingsvariabele:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
Uw b en c loops doen gewoon een handmatige lpad echt.