ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 解决dbms_lob.loadfromfile加载lob数据后出现乱码的问题

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

原创 Linux操作系统 作者:wxjzqym 时间:2012-09-27 15:39:57 0 删除 编辑
   今天接到个需求,要将一个文本文件的内容给加载到某个表的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博客 ” ,链接:https://blog.itpub.net/20801486/viewspace-745243/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-15

  • 博文量
    100
  • 访问量
    520569