oracle 写入文件 出错,UTL_FILE.PUT写入txt时超过32k报ORA-29285: 文件写入错误

将表中clob字段生成txt 文件,发现只要超过32k写入就报错。

5b2d73e79b77cc27b8100850a54fb5d9.png

使用UTL_FILE.PUT的方式循环将buffer写入文件,但发现一旦某个字段超过32K,在刚好超过32k便报出以上ora06512文件写入错误

v_out_filename_full := v_filedir_guid || v_out_fileext;

v_file_handle       := UTL_FILE.FOPEN(v_outdir,

v_out_filename, 'w',32767);

pos                 := 1;

begin

LOOP

dbms_lob.read(v_clob_loc, amt, pos, buf);

-- process contents of buf

UTL_FILE.PUT(v_file_handle, buf);

UTL_FILE.FFLUSH(file => v_file_handle);

pos := pos + amt;

END LOOP;

EXCEPTION

WHEN NO_DATA_FOUND then

UTL_FILE.FCLOSE(v_file_handle);

end;

于是尝试将写入的方式改成wb 字节模式,并用UTL_FILE.PUT_RAW的模式,就可以了:

v_out_filename_full := v_filedir_guid || v_out_fileext;

v_file_handle       := UTL_FILE.FOPEN(v_outdir,

v_out_filename, 'wb',32767); <<<<<<<<<<<<

pos                 := 1;

begin

LOOP

dbms_lob.read(v_clob_loc, amt, pos, buf);

-- process contents of buf

UTL_FILE.PUT_RAW(v_file_handle, utl_raw.cast_to_raw(buf));<<<<<<<<<<<<<<<

UTL_FILE.FFLUSH(file => v_file_handle);

pos := pos + amt;

END LOOP;

EXCEPTION

WHEN NO_DATA_FOUND then

UTL_FILE.FCLOSE(v_file_handle);

end;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值