Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pl/sql将太长的行写入文件会导致换行_Sql_Oracle_Plsql_Utl File - Fatal编程技术网

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

使用pl/sql将太长的行写入文件会导致换行,sql,oracle,plsql,utl-file,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, c

我正在尝试使用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
非常感谢您的帮助

克瑞斯滕酒店

  • 您是否真的得到换行符或您的文本编辑器自动按长度限制换行
  • 选中“colC”列。其中的文本可能已经有换行符。确保您的工具(用于转储上述“表数据”的工具)实际显示换行符。对于某些情况,您必须双击UI中的表格单元格以打开“详细信息”查看器,该查看器可以显示新行
  • 如果连接中至少有一个CLOB列,则可能会超过max varchar2 size
  • 您是否真的得到换行符或您的文本编辑器自动按长度限制换行
  • 选中“colC”列。其中的文本可能已经有换行符。确保您的工具(用于转储上述“表数据”的工具)实际显示换行符。对于某些情况,您必须双击UI中的表格单元格以打开“详细信息”查看器,该查看器可以显示新行
  • 如果连接中至少有一个CLOB列,则可能会超过max varchar2 size

  • 从输出来看,表中的数据似乎已经包含换行符/新行字符

    尝试使用空格替换它们

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

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

    从输出来看,表中的数据似乎已经包含换行符/新行字符

    尝试使用空格替换它们

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

    注意:第一种替换方法适用于Unix换行符(LF),第二种替换方法处理Windows换行符(CR+LF)

    您确定表数据不只是包含换行符吗?如果使用
    dump()
    函数检查数据,则可以查找控制字符,例如
    ***
    AIR
    之间的字符。是否确定表数据不包含换行字符?如果使用
    dump()
    函数检查数据,则可以查找控制字符,例如
    ***
    AIR
    之间的字符。以上所有操作似乎都没有帮助。这是一个colC collumns的垃圾场。在以下情况中是否存在断线:Typ=1 Len=73:42,42,42,32,73,68,69,77,32,68,54,50,48,48,51,45,48,56,32,42,42,42,13,10,65,73,82,32,67,79,77,80,82,69,83,79,82,32,45,32,48,56,48,48,45,48,48,32,42,42,42,42,42,13,10,65,73,82,32,67,79,80,82,82,69,83,82@Kresten-是,运行之间的
    13,10
    部分
    42,42,42
    (这是三个星号)和
    65,73,82
    这是“AIR”。这个答案并不完全正确,对
    ascii()
    的调用是不需要的-它应该只使用
    chr(10)
    chr(13)
    @AlexPoole谢谢你的编辑。我想知道
    ascii()
    function,但从dba-oracle.com获得了示例,不敢更改(我没有oracle实例ATM)。首先不确定它为什么在那里:嗯,那页上有很多错误。反正我一般不信任一个网站,但这是一个特别糟糕的示例…*8-)以上这些似乎都没有帮助。这是一个colC collumns的垃圾场。在以下情况中是否存在断线:Typ=1 Len=73:42,42,42,32,73,68,69,77,32,68,54,50,48,48,51,45,48,56,32,42,42,42,13,10,65,73,82,32,67,79,77,80,82,69,83,79,82,32,45,32,48,56,48,48,45,48,48,32,42,42,42,42,42,13,10,65,73,82,32,67,79,80,82,82,69,83,82@Kresten-是,运行之间的
    13,10
    部分
    42,42,42
    (这是三个星号)和
    65,73,82
    这是“AIR”。这个答案并不完全正确,对
    ascii()
    的调用是不需要的-它应该只使用
    chr(10)
    chr(13)
    @AlexPoole谢谢你的编辑。我想知道
    ascii()
    function,但从dba-oracle.com获得了示例,不敢更改(我没有oracle实例ATM)。首先不确定它为什么在那里:嗯,那页上有很多错误。反正我一般不信任一个网站,但这是一个特别糟糕的示例…*8-)