【发布时间】:2019-12-25 00:03:39
【问题描述】:
我不能在 Oracle PL/SQL 匿名块中使用 dbms_output.put_line 输出超过 100 行。
请查看两个示例的示例代码:一个有效的示例,一个无效的示例。谢谢。
# #### CODE SAMPLE #1
### THE FOLLOWING CODE SAMPLE WORKS FINE.
### 0718.002, Start time is: 08/19/2019 02:32:04pm
CTS@BPSMDSTS-C1>><<test_dbms_output>> begin
2 dbms_output.put_line ('Before the loop');
3 <<do_the_loop>> for i in 1 .. 98 loop
4 -- <<do_the_loop>> for i in 1 .. 99 loop
5 dbms_output.put_line ('i: [' || trim (to_char (i)) || ']');
6 end loop do_the_loop;
7 dbms_output.put_line ('After the loop');
8 end test_dbms_output;
9 /
Before the loop
i: [1]
i: [2]
i: [3]
i: [4]
i: [5]
... etc. deleted output for brevity, and due to redundancy ...
i: [94]
i: [95]
i: [96]
i: [97]
i: [98]
After the loop
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.10
The time now: 08/19/2019 02:32:05pm
#
#
### CODE SAMPLE #2
### THE FOLLOWING CODE SAMPLE DOES NOT WORK. NOTHING IS OUTPUT.
### 0718.002, Start time is: 08/19/2019 02:32:33pm
CTS@BPSMDSTS-C1>><<test_dbms_output>> begin
2 dbms_output.put_line ('Before the loop');
3 -- <<do_the_loop>> for i in 1 .. 98 loop
4 <<do_the_loop>> for i in 1 .. 99 loop
5 dbms_output.put_line ('i: [' || trim (to_char (i)) || ']');
6 end loop do_the_loop;
7 dbms_output.put_line ('After the loop');
8 end test_dbms_output;
9 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
The time now: 08/19/2019 02:32:33pm
在代码示例#1 中,实现了预期的结果:每个循环生成一行输出。在代码示例 #2 中,结果出乎意料。不生成任何输出。
【问题讨论】:
-
对我来说很好,只要
set serveroutput on已经运行 - 显然它已经为第一个工作......你输出中的其他文本来自哪里,你确定吗不只是在两者之间关闭输出吗?当两个块都没有这样做时,为什么要引用超过 100 行? -
嗨,亚历克斯。另一个文本是我编写的一个小程序的一部分,它为我后台处理并输出到一个文件,该文件在我工作时整天都在附加。它记录了时间,这样我就可以参考我在当天早些时候、前一天等所做的工作。第一个块循环计数为 98。然后有一个循环前行(“循环前”)和一个后-循环行(“循环后”),总共输出 100 行。第二个块循环计数 99,总共输出 101 行。
-
对,我没有计算之前/之后。但是循环之间发生了什么? serveroutput 在第一个块之前在哪里打开,在这之间可能会关闭什么?目前尚不清楚您的程序如何与 SQL*Plus 交互。不过,问题似乎出在某个地方。
标签: oracle plsql sqlplus dbms-output