我正在尝试使用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
- 您真的会得到线路破坏还是您的文本编辑器自动按限制划分行?
- 检查" Colc"列。那里的文字可能已经有线断裂了。确保您的工具(您用来丢弃上面"表数据"的工具)实际上显示了您的线路断路。对于某些人来说,您必须双击UI的表单元格上,以打开一个可以显示新行的"细节"查看器。
- 如果您的串联中至少有一个clob列,则可能会超过最大varchar2大小。
从输出中,表中的数据看起来已经包含了线路/新的line字符。
尝试使用
将它们替换为replace(replace(colC,chr(10),' '), chr(13),'')
注意:第一个替换作品在Unix线路断裂(LF)上工作,第二个替换可处理Windows line Breaks(CR LF)