加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 无法使用UTL_FILE.PUT_LINE写入大尺寸数据

发布时间:2020-12-16 23:22:05 所属栏目:百科 来源:网络整理
导读:我创建了一个包含大量数据的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_FIL
我创建了一个包含大量数据的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:数值或值错误

解决方法

UTL_FILE documentation says:

“The maximum size of the buffer parameter is 32767 bytes unless you specify a smaller size in 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',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;
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读