som*_*ser 5 oracle clob oracle11g nls-lang
将文本文件作为 clob 加载到数据库时出现问题。
加载文本文件的代码:
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;
Run Code Online (Sandbox Code Playgroud)
文本文件是UTF8。加载到数据库后,我运行 select 并获取方块而不是俄语字符。请帮忙!
尝试使用LOADCLOBFROMFILE而不是LOADFROMFILE。
从手册中:
注意:如果字符集是可变宽度(例如 UTF-8),则 LOB 值将以固定宽度 UCS2 格式存储。因此,如果您使用DBMS_LOB.LOADFROMFILE,则BFILE中的数据应该采用UCS2字符集而不是UTF-8字符集。但是,您应该使用 sql*loader 而不是 LOADFROMFILE 将数据加载到 CLOB 或 NCLOB,因为 sql*loader 提供了必要的字符集转换。