【发布时间】:2019-04-11 22:59:15
【问题描述】:
当使用 dbms_output 放置一个带回车的 clob 时,它会插入一个额外的换行符,这会创建额外的换行符,在 SQL*Plus 中运行它并使用 spool 捕获它时可以看到这些换行符。正在使用的数据库是 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 列,但我需要在使用 spool 创建一些客户端日志文件之前进行处理,因为我无法使用 utl_file 或类似函数来创建它们。如果可能的话,这也应该在 PL/SQL 或 SQL*Plus 中处理,所以我不是在寻找使用文本编辑器、sh/bat 脚本或类似方法从外部消除额外 CR 的解决方案。
我已尝试找出插入它的原因或如何摆脱它,但无济于事,因此将不胜感激。
【问题讨论】: