将文本文件作为 clob 加载到数据库时出现问题。
- Oracle 版本:Oracle Database 11g EE 版本 11.2.0.2.0
- NLS_LANG:RUSSIAN_RUSSIA.CL8MSWIN1251
- NLS_CHARACTERSET:AL32UTF8
加载文本文件的代码:
DECLARE
L_BFILE BFILE;
L_CLOB CLOB;
file_name VARCHAR2(300);
BEGIN
file_name := 'test.txt';
L_BFILE := BFILENAME('DIR', file_name);
if (dbms_lob.fileexists(l_bfile) = 1) then
INSERT INTO TEST T
VALUES (SEQ_TEST.NEXTVAL, EMPTY_CLOB(),file_name) return r_data into l_clob;
L_BFILE := BFILENAME('DIR', file_name);
DBMS_LOB.FILEOPEN(L_BFILE, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADFROMFILE(L_CLOB, L_BFILE, DBMS_LOB.GETLENGTH(L_BFILE));
DBMS_LOB.FILECLOSE(L_BFILE);
COMMIT;
end if;
END;
文本文件为UTF8。加载到数据库后,我运行选择并获取方块而不是俄语字符。请帮忙!
Try 从文件加载CLOB代替从文件加载.
从手册中:
注意:如果字符集是变化宽度的,例如 UTF-8,
LOB 值以固定宽度 UCS2 格式存储。因此,如果您
使用DBMS_LOB.LOADFROMFILE,BFILE中的数据应该在
UCS2 字符集而不是 UTF-8 字符集。然而,
您应该使用 sql*loader 而不是 LOADFROMFILE 将数据加载到
CLOB 或 NCLOB 因为 sql*loader 提供了必要的字符集
转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)