2014-10-25 3 views
0

я пытался сделать что-то вроде этого когда вход: 5путать между DBMS_OUTPUT.PUT_LINE и dbms_output.put PL/SQL

он напечатает ABCDE

вход: 10

печати ABCDE JIHGF

вход: 15

печать ABCDE JIHGF KLMNO

вход: 20 ABCDE JIHGF KLMNO TSRQP

и так далее ... вот мой код я создаю

declare 
    angka number := '&Angka'; 
    i number := trunc(angka/5); 
    p number := 65; 
    a number := 1; 
    b number := 1; 
begin 
    while a <= b loop 
    if mod(i,2) = 1 then 
     a := 5; 
     for b in 1..5 loop 
      p := p + a 
      dbms_output.put(chr(p) || ' '); 
      a := a - 1; 
     end loop; 
     p := p + 5; 
    else 
     a := 1; 
     for b in 1..5 loop 
      p := p + a 
      dbms_output.put(chr(p) || ' '); 
      a := a + 1; 
     end loop; 
    end loop; 
    dbms_output.put_line(' '); 
end; 
/

, но я был все еще запутался, он все еще не работает и около dbms_output.put_line vs dbms_output.put может кто-то exp Это? потому что я пытался печатать с помощью dbms_output.put он не показал .. я не знаю, почему

Благодаря

ответ

1

Во-первых, линия p := p + a не останавливали запятой. В идеале, анонимный блок PL/SQL не должен компилироваться на первом месте.

Во-вторых, с процедурой PUT, вы еще не закончили линию. Для извлечения массива строк из буфера требуется GET_LINES.

Был аналогичный вопрос, Is dbms_output.put() being buffered differently from dbms_output.put_line()?

0

У вас есть какие-то проблемы в вашем коде. Я не верю, что вы можете выполнить именно этот код. Уместно, вы забыли скопировать некоторые его части.

Прежде всего, синтаксические ошибки:

declare 
    angka number := '&Angka'; 
    i number := trunc(angka/5); 
    p number := 65; 
    a number := 1; 
    b number := 1; 
begin 
    while a <= b loop 
    if mod(i,2) = 1 then 
     a := 5; 
     for b in 1..5 loop 
      p := p + a -- ";" missed 
      dbms_output.put(chr(p) || ' '); 
      a := a - 1; 
     end loop; 
     p := p + 5; 
    else 
     a := 1; 
     for b in 1..5 loop 
      p := p + a -- ";" missed 
      dbms_output.put(chr(p) || ' '); 
      a := a + 1; 
     end loop; 
    -- here you missed "end if" 
    end loop; 
dbms_output.put_line(' '); 
end; 
/

Также вам не нужен ваш внешний контур («в то время как цикл < = Ъ»), так как его состояние всегда верно и выполнение кода никогда не заканчивается , И последнее - когда вы объявляете

for b in 1..5 loop 

оракул создает здесь новую переменную с именем «б», а внутри цикла ранее объявившие б не видно. Попробуйте выполнить следующее:

declare 
    b number := 111; 
begin 
    for b in 1..5 loop 
    dbms_output.put_line(b); 
    end loop; 
    dbms_output.put_line(b); 
end; 
/

Вы получите:

1 
2 
3 
4 
5 
111 

Если вы исправить эти ошибки, ваш код будет работать, как вы хотите.

Смежные вопросы