dbms_output.put_line和dbms_output.put pl / sql之间混淆了

时间:2014-10-25 19:05:47

标签: oracle plsql oracle11g

我试图做这样的事情 输入时:5

它会打印出来 A B C D E

输入:10

打印 A B C D E J I H G F

输入:15 ​​

打印 A B C D E J I H G F. K L M N O

输入:20 A B C D E J I H G F. K L M N O. T S R Q P

依旧...... 这是我创建的代码

    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可以解释一下吗?因为我正在尝试使用dbms_output.put打印它没有显示..我不知道为什么

由于

2 个答案:

答案 0 :(得分:1)

首先,行p := p + a尚未以分号结束。理想情况下,PL/SQL匿名块不应该在第一时间编译。

其次,使用PUT程序,您尚未完成该行。需要GET_LINES从缓冲区中检索一行数组。

有一个类似的问题,Is dbms_output.put() being buffered differently from dbms_output.put_line()?

答案 1 :(得分: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;
/

此外,您不需要外部循环(“当&lt; = b循环”时),因为它的条件总是为真,代码执行永远不会结束。最后 - 当你宣布

for b in 1..5 loop

oracle在这里创建了名为“b”的新变量,并且在先前声明为b的循环内部是不可见的。尝试执行此操作:

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

如果您更正了这些错误,您的代码将按您的意愿运行。