Xml 无法使用UTL_FILE.PUT_行写入大数据

Xml 无法使用UTL_FILE.PUT_行写入大数据,xml,oracle,file-io,Xml,Oracle,File Io,我创建了一个包含大量数据的xml。现在我正试图将生成的xml写入一个文件 声明: prodFeed_file UTL_FILE.FILE_TYPE; prodFeed_file := UTL_FILE.FOPEN ('CSV_DIR', 'feed.xml', 'w', 32767); 写入文件: UTL_FILE.PUT_LINE(prodFeed_file,l_xmltype.getClobVal); UTL_FILE.FCLOSE(prodFeed_file); 如果l_xmlt

我创建了一个包含大量数据的xml。现在我正试图将生成的xml写入一个文件

声明:

prodFeed_file  UTL_FILE.FILE_TYPE;
prodFeed_file := UTL_FILE.FOPEN ('CSV_DIR', 'feed.xml', 'w', 32767); 
写入文件:

UTL_FILE.PUT_LINE(prodFeed_file,l_xmltype.getClobVal);

UTL_FILE.FCLOSE(prodFeed_file);
如果
l_xmltype.getClobVal
返回有限的记录,则它是工作文件,但如果
l_xmltype.getClobVal
超过了大小(几乎35 KB),则它给出了一个错误:

ORA-06502:PL/SQL:numeric或value错误

“缓冲区参数的最大大小为32767字节,除非在FOPEN中指定较小的大小。”

您必须一块一块地编写CLOB。大概是这样的:

DECLARE
  v_clob CLOB;
  v_clob_length INTEGER;
  pos INTEGER := 1;
  buffer VARCHAR2(32767);
  amount BINARY_INTEGER := 32760;
  prodFeed_file utl_file.file_type;
BEGIN
  prodFeed_file := UTL_FILE.FOPEN ('CSV_DIR', 'productFeedLargo.xml', 'w', 32767);
  v_clob := l_xmltype.getClobVal;
  v_clob_length := length(v_clob);

  WHILE pos < v_clob_length LOOP
    dbms_lob.read(v_clob, amount, pos, buffer);
    utl_file.put(prodFeed_file , char_buffer);
    utl_file.fflush(prodFeed_file);
    pos := pos + amount;
  END LOOP;

  utl_file.fclose(prodFeed_file);

END;
/
声明
v_clob clob;
v_clob_长度整数;
pos整数:=1;
缓冲区VARCHAR2(32767);
金额二进制_整数:=32760;
prodFeed_file utl_file.file_类型;
开始
prodFeed_file:=UTL_file.FOPEN('CSV_DIR','productFeedLargo.xml','w',32767);
v_clob:=l_xmltype.getClobVal;
v_clob_length:=长度(v_clob);
而pos
我发布了一个答案,该答案刚刚链接到文档。但是由于你发布了一个解决方案,我已经删除了我的答案并添加了你的链接。嗨,你能帮我一下吗?