使用pl / sql向文件写入太长的行会导致换行

时间:2019-03-18 12:08:59

标签: sql oracle plsql utl-file

我正在尝试使用pl / SQL将一些数据从oracle写入文件。 我希望脚本只能处理非常小的行尺寸。 当行大小变得太大时,会将换行符添加到文件中,而我不知道为什么。

请看看。

这是我的脚本代码:

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 个答案:

答案 0 :(得分:1)

  1. 您真的得到换行符还是您的文本编辑器自动按长度限制换行?
  2. 检查“ colC”列。其中的文本可能已经有换行符。确保您的工具(上面用来转储“表数据”的工具)确实显示了换行符。对于某些用户,您必须双击UI中的表格单元格以打开“详细信息”查看器,该显示器可以显示新行。
  3. 如果串联中至少有一个CLOB列,则可能超出了varchar2的最大大小。

答案 1 :(得分:1)

从输出中看,表中的数据看起来已经包含换行符/换行符。

尝试使用空格替换它们

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

注意:第一个替换版本适用于Unix换行符(LF),第二个替换版本可处理Windows换行符(CR + LF)