DBMS_LOB包LOADFROMFILE过程加载CLOB乱码

TOM的例子里面看到使用LOADFROMFILE加载CLOB,但是使用的过程中出现了乱码。

 

 

10.211.2的版本中都出现相同的问题:

SQL> host echo 'test' > abc.txt

SQL> DECLARE
  2     V_LOB CLOB;
  3     V_FILE BFILE := BFILENAME('D_OUTPUT', 'abc.txt');
  4  BEGIN
  5     UPDATE T SET CONTENTS = EMPTY_CLOB RETURN CONTENTS INTO V_LOB;
  6     DBMS_LOB.FILEOPEN(V_FILE);
  7     DBMS_LOB.LOADFROMFILE(V_LOB, V_FILE, DBMS_LOB.LOBMAXSIZE);
  8     DBMS_LOB.FILECLOSEALL;
  9     COMMIT;
 10  END;
 11  /

PL/SQL 过程已成功完成。

SQL> select * from t;

        ID NAME       CONTENTS
---------- ---------- -----------------------------------------------
         1 ABC       
瑥獴

尝试通过iconv改变文件的格式,结果依旧。

windows上里面notepad写入“test”字符后,分别保存为unicodeutf-8编码文件,然后以文本方式ftp到当前服务器,利用LOADFROMFILE加载后,也是乱码:

SQL> DECLARE
  2     V_LOB CLOB;
  3     V_FILE BFILE := BFILENAME('D_OUTPUT', 'uni.txt');
  4  BEGIN
  5     UPDATE T SET CONTENTS = EMPTY_CLOB RETURN CONTENTS INTO V_LOB;
  6     DBMS_LOB.FILEOPEN(V_FILE);
  7     DBMS_LOB.LOADFROMFILE(V_LOB, V_FILE, DBMS_LOB.LOBMAXSIZE);
  8     DBMS_LOB.FILECLOSEALL;
  9     COMMIT;
 10  END;
 11  /

PL/SQL 过程已成功完成。

SQL> SELECT * FROM T;

        ID NAME       CONTENTS
---------- ---------- ---------------------------------------------
         1 ABC       
?琀攀猀琀

SQL> DECLARE
  2     V_LOB CLOB;
  3     V_FILE BFILE := BFILENAME('D_OUTPUT', 'utf.txt');
  4  BEGIN
  5     UPDATE T SET CONTENTS = EMPTY_CLOB RETURN CONTENTS INTO V_LOB;
  6     DBMS_LOB.FILEOPEN(V_FILE);
  7     DBMS_LOB.LOADFROMFILE(V_LOB, V_FILE, DBMS_LOB.LOBMAXSIZE);
  8     DBMS_LOB.FILECLOSEALL;
  9     COMMIT;
 10  END;
 11  /

PL/SQL 过程已成功完成。

SQL> SELECT * FROM T;

        ID NAME       CONTENTS
---------- ---------- --------------------------------------------
         1 ABC       
??敳

查询了METALINK,发现果然是Oraclebug,参考文档ID 562717.1Oracle推荐在9.2如果加载CLOB,使用LOADCLOBFROMFILE来代替。

 

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

转载于:http://blog.itpub.net/4227/viewspace-624979/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值