在 dbms_output.put_line 和 dbms_output.put pl/sql 之间混淆
Posted
技术标签:
【中文标题】在 dbms_output.put_line 和 dbms_output.put pl/sql 之间混淆【英文标题】:confused between dbms_output.put_line and dbms_output.put pl/sql 【发布时间】:2014-10-25 19:05:46 【问题描述】:我试图做这样的事情 输入时: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 打印它没有显示.. 我不知道为什么
谢谢
【问题讨论】:
【参考方案1】:首先,p := p + a
行没有以分号结束。理想情况下,PL/SQL
匿名块首先不应该编译。
其次,使用PUT
程序,您还没有完成该行。它需要GET_LINES
从缓冲区中检索行数组。
有一个类似的问题,Is dbms_output.put() being buffered differently from dbms_output.put_line()?
【讨论】:
【参考方案2】:您的代码中存在一些问题。我不相信您可以完全执行此代码。可能是您忘记复制其中的某些部分。
首先,语法错误:
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;
/
您也不需要外部循环(“while a
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
如果您更正这些错误,您的代码将按您的意愿运行。
【讨论】:
以上是关于在 dbms_output.put_line 和 dbms_output.put pl/sql 之间混淆的主要内容,如果未能解决你的问题,请参考以下文章
DBMS_OUTPUT.PUT_LINE 抛出“PL/SQL:数字或值错误”