【问题标题】:PUT_LINE is limited to 100 linesPUT_LINE 限制为 100 行
【发布时间】: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


【解决方案1】:

在运行脚本之前在 SQL*Plus 中执行以下命令:

SET SERVEROUTPUT ON SIZE 250000
SET LINESIZE 500
SET TRIMSPOOL ON

这将为 DBMS_OUTPUT 提供一个 250000 字节的输出缓冲区以供使用,将最大行大小更改为 500 个字符,并在行结束字符后修剪输出行。如果您确信您的程序将终止,您可以将250000 更改为1000000 甚至UNLIMITED

【讨论】:

  • 嗨,鲍勃,感谢您的帮助。我尝试的任何方法都不起作用。当我访问 www.livesql.oracle.com 时,它运行良好。很奇怪,很奇怪。
猜你喜欢
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2023-03-03
  • 2011-03-08
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多