PL / SQL dbms_output добавление дополнительного возврата каретки в CLOB - PullRequest
0 голосов
/ 08 ноября 2018

При использовании dbms_output для помещения сгустка с возвратом каретки он вставляет дополнительный, который создает дополнительные разрывы строк, которые можно увидеть при запуске его в 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, если это возможно, поэтому я не ищу решений в плане устранения лишних CR извне с помощью текстового редактора, сценариев sh / bat или аналогичных методов.

Я пытался выяснить, почему он вставлен или как от него избавиться, но безрезультатно, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Использовать DBMS_OUTPUT.PUT.
Эта процедура помещает частичную строку в буфер.

О "Справочнике по пакетам и типам базы данных PL / SQL", глава 100 DBMS_OUTPUT
PUT Процедура

0 голосов
/ 08 ноября 2018

Включите SET LINESIZE в ваш набор из SET команд, например,

set serveroutput on
set linesize 2000        --> this
spool ..
...