它会打印出来 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打印它没有显示..我不知道为什么
由于
答案 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
如果您更正了这些错误,您的代码将按您的意愿运行。