PL/SQL - DBMS_OUTPUT 正在换行

PL/SQL - DBMS_OUTPUT is wrapping text

自从我们公司升级了 Oracle SQL Developer 版本后,我一直注意到使用 DBMS_OUTPUT.PUT_LINE 将数据输出到 DBMS_OUTPUT 时出现问题。

我们使用此功能并将其与 Excel 中的文本到列功能相结合,以快速生成报告。但是,我发现自更新以来,文本在 DBMS_OUTPUT 中(看似)随机强制换行。这对报告生成是不利的,因为它依赖于与传播 sheet 模板的完美对齐。

我不确定是什么导致了这个换行符,但为了证明我在下面提供了一个混乱但希望有用的示例。

如果我运行以下语句22次为例:

begin
DBMS_OUTPUT.PUT_LINE('111111111111111111111111111111111111111111111111111111111111111111111111111');
end;

我们希望输出连续 return 75 个 1,共 22 次。然而,这种情况并非如此。在第 11 和 12 行,以下是 returned:

11
1111111111111111111111111111111111111111111111111111111111111111111111111

(上面第11行显示2个1,第12行显示73)

再次在第 22 和 23 行

111
111111111111111111111111111111111111111111111111111111111111111111111111

(上面第11行显示3个1,第12行显示72个)

如您所见,该行在第 11 行和第 22 行中断。

需要注意的是,所有其他行的格式都正确,只有第 11 和 22 行的文本是 wrapping/breaking

当然,这不是一个有效的现实世界示例,但我认为这是解释它的最简单方法。

有没有人知道为什么线条会换行以及我该如何解决?

您使用的版本 4.2.0.16 是第二个早期采用者版本 4.2EA2。此行为 was reported as a bug,并在 4.2 发行版 (4.2.0.17) 中得到修复。

我可以在 4.2.0.16 中复制,但在 4.2.0.17 中不能;尽管即使在 EA2 中,我也看到了与您不同的地方的额外休息时间。您可以通过更改会话行大小来修改它们出现的位置。对于您看到的确切行为,您似乎将行大小设置为 762。

最大设置为 32767 直到第 432 行我才看到问题,支持与 linesize/string 长度相关(换行符加上一个 - 32767/76 = 431.144,所以你在额外不需要的换行符之前获得 431 条完整的行和下一行的 11 条);当然,对于您的实际情况,这可能仍然不够好。

升级将是比尝试解决问题更有效的方法。您可以从 the download site.

获取当前发布版本