sql >> Database teknologi >  >> RDS >> Oracle

FEJL:Referer tælleren som målet for en opgave - PL/SQL

Ændring af de tidligere svar til rent faktisk at give dig Pascals trekant, som du nævnte, du forsøgte i en kommentar:

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.
 

Både dine dbms_output.put_line opkald skulle kun være dbms_output.put , da det var at udskrive hver * på en linje for sig selv. Men du har brug for et linjeskift efter hver gang omkring a loop, så jeg har tilføjet en dbms_output.newline i slutningen af ​​det. Du sænkede også temp inde i b loop, hvilket betød, at det var nul i stedet for (n-1) for anden gang omkring a sløjfe; men du behøver ikke rigtig en separat temp variabel overhovedet, da det altid er det samme som (n-a)+1 og +1 sætter bare et ekstra mellemrum på hver linje. (Jeg lavede også a loop 1..n da jeg antager, at du vil ændre værdien af ​​n senere kun ét sted). Med n := 8 :

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

Det er afgørende, at du også skal set serveroutput on format wrapped , ellers de førende mellemrum, du genererer i b sløjfe kasseres.

Du kan også gøre dette i almindelig SQL, selvom du skal angive 5 to gange, eller brug en bindings- eller substitutionsvariabel:

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

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

Din b og c loops laver bare en manuel lpad virkelig.



  1. Slick 3.0 (scala) forespørgsler returnerer ikke data, før de køres flere gange (tror jeg)

  2. Sådan bruger du QUERY i expdp til kun at udtrække de sidste 3 måneders data

  3. syntaksfejl på DECLARE CURSOR FOR

  4. Erstat null-værdi med tidligere tilgængelig værdi i Row SQL-serverforespørgsel