PL / SQL dbms_output在CLOB中添加额外的回车符

时间:2018-11-08 12:22:49

标签: plsql oracle11g sqlplus

在使用dbms_output将Clob和回车符放回去时,它会插入一个附加的换行符,这会创建额外的换行符,在SQL * Plus中运行换行符并使用假脱机捕获它时可以看到。使用的数据库是Oracle 11g。例如,运行以下命令:

SET HEADING OFF
SET FEEDBACK OFF
SET ECHO OFF SET
VERIFY OFF SET
TRIMOUT ON SET
TRIMSPOOL ON
SET SERVEROUTPUT ON

SPOOL ./TestResult.txt

-- Spooling direct select for comparing results
SELECT 'line 1'||CHR(13)||CHR(10)||'line 2' FROM DUAL;

declare
  l_clob clob;
begin
  l_clob := 'line 1'||chr(13)||chr(10)||'line 2';
  dbms_output.put_line(l_clob);
end;
/

SPOOL OFF

产生:

line 1
line 2

line 1

line 2

基础换行符如下:

[CR][LF]
line 1[CR][LF]
line 2[CR][LF]
[CR][LF]
line 1[CR]
[CR][LF]
line 2[CR][LF]
[CR][LF]

另外,上面的代码是一个简化的示例,用于说明我的问题。实际上,CRLF行跳转来自我无法修改的clob列,但是在创建带有假脱机的某些客户端日志文件之前,我需要进行处理,因为我无法使用utl_file或类似的函数来创建它们。另外,如果可能的话,也应该在PL / SQL或SQL * Plus内部处理此问题,因此我不希望在使用文本编辑器,sh / bat脚本或类似方法从外部消除额外CR的情况下寻找解决方案。

我试图找出为什么要插入它,或者如何无济于事,所以我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

angular包含在SET LINESIZE命令的 set 中,例如

SET

答案 1 :(得分:0)

使用DBMS_OUTPUT.PUT。
此过程将部分行放在缓冲区中。

在“数据库PL / SQL包和类型参考”的第100章DBMS_OUTPUT
PUT Procedure