Запись слишком длинных строк в файл с помощью pl / sql приводит к разрывам строк - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь записать некоторые данные в файл из оракула, используя pl / SQL.Мне кажется, что сценарий может работать только с линиями очень маленьких размеров.когда размер строки становится слишком большим, в файл добавляются разрывы строк, и я не могу понять, почему.

Пожалуйста, посмотрите.

Это мой код скрипта:

DECLARE
  fHandle  UTL_FILE.FILE_TYPE;
  filename VARCHAR2(32000) := 'fil';
BEGIN
  fHandle := UTL_FILE.FOPEN('dir', filename, 'w');
  FOR i IN (SELECT colA, colB, substr(colC,1,20) as colC, colD FROM table) 
--FOR i IN (SELECT colA, colB, colC, colD FROM table) 
  LOOP
    utl_file.put_line(fHandle, i.colA||';'||i.ColB||';'||i.colC||';'||i.colD);
  END LOOP;
  UTL_FILE.FCLOSE(fHandle);
END;

Это таблица данных:

G100000 1   "AXE DE GUIDAGE D.20h7 LG 700 - POUR DERIVEUR COURSE 500"                  Obsolete
G200000 2   "AXE DE GUIDAGE D.20h7 LG 700 - POUR DERIVEUR COURSE 500"                  Released
G300000 1   "*** IDEM D620203-09 *** AIR COMPRESSOR - 1089057554 - PRESS.TRANSDUCER"   Obsolete 
G400000 1   "*** IDEM D620203-08 *** AIR COMPRESSOR - 1089057470 - TEMPERATURE SENSOR" Obsolete

Это вывод файла:

G100000;1;AXE DE GUIDAGE D.20h;Obsolete
G200000;2;AXE DE GUIDAGE D.20h;Released
S300000;1;*** IDEM D620203-08 ;Obsolete
S400000;1;*** IDEM D620203-09 ;Obsolete

Но если я поменяю строку 6 на строку 7, я получу такой результат:

G100000;1;*** IDEM D620203-08 ***
AIR COMPRESSOR - 1089057470 - TEMPERATURE SENSOR;Obsolete
G200000;2;AXE DE GUIDAGE D.20h7 LG 700 
- POUR DERIVEUR COURSE 500;Released
G300000;1;*** IDEM D620203-09 ***
AIR COMPRESSOR - 1089057554 - PRESS.TRANSDUCER;Obsolete
G400000;1;AXE DE GUIDAGE D.20h7 LG 700 
- POUR DERIVEUR COURSE 500;Obsolete

Любая помощь очень ценится.

BR Kresten

Ответы [ 2 ]

1 голос
/ 18 марта 2019

По выводу выглядит, что данные в таблице уже содержат разрывы строк / символы новой строки.

Попробуйте заменить их пробелами, используя

replace(replace(colC,chr(10),' '), chr(13),'')

Примечание. Первая замена работает на переносах строк Unix (LF), вторая - на разрывах строк Windows (CR + LF)

1 голос
/ 18 марта 2019
  1. Вы действительно получаете разрывы строк или ваш текстовый редактор автоматически разбивает строки по предельной длине?
  2. Проверьте столбец "colC".Текст там может уже иметь разрывы строк.Убедитесь, что ваш инструмент (тот, который вы использовали для выгрузки «табличных данных» выше) на самом деле показывает разрывы строк.Для некоторых вам нужно дважды щелкнуть ячейку таблицы в пользовательском интерфейсе, чтобы открыть «детализированный» просмотрщик, который может отображать новые строки.
  3. Если в вашей конкатенации есть хотя бы один столбец CLOB, вы можете превысить максимумразмер varchar2.
...