解决dbms_lob.loadfromfile加载lob数据后出现乱码的问题

   今天接到个需求,要将一个文本文件的内容给加载到某个表的clob字段中,之前对lob了解很少,不过在tom的expert-one-on-one中介绍了可以通过如下存储过程来实现这个功能。  
declare
a_clob clob;
a_warn integer;
bfile_name bfile :=bfilename('FILE_DUMP','3.txt');
begin
  insert into clobtest values (empty_clob())
  returning col1 into a_clob;
  dbms_lob.fileopen(bfile_name);
  dbms_lob.loadfromfile(a_clob, bfile_name,dbms_lob.getlength(bfile_name));
  dbms_lob.fileclose(bfile_name);
  commit;
end;
/
    使用该过程后,查询数据发现有乱码,出现乱码的根本原因是dbms_lob包里的loadfromfile过程不支持变长的字符集,比如GBK,UTF8等。解决方法的可以使用dbms_lob包里的另外一个过程loadclobfromfile过程,因为此过程中有个参数叫BFILE_CSID,这个参数可以用来指定bfile文件使用的字符集编码。使用方法如下:
declare
v_clob clob;
bfil bfile :=bfilename('FILE_DUMP','3.txt');
dest_offset number :=1;
source_offset number :=1;
src_csid number :=NLS_CHARSET_ID('UTF8');
lang_ctx integer :=DBMS_LOB.DEFAULT_LANG_CTX;
warn integer;
begin
  insert into clobtest values (empty_clob())
  returning col1 into v_clob;
  dbms_lob.fileopen(bfil);
  DBMS_LOB.LOADCLOBFROMFILE(v_clob,bfil,DBMS_LOB.LOBMAXSIZE,dest_offset,source_offset,src_csid,lang_ctx,warn);
  dbms_lob.fileclose(bfil);
  commit;
end;
/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20801486/viewspace-745243/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20801486/viewspace-745243/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值