我在Oracle Linux 7.2上有一个文本文件(iso-8859-1),我正尝试在Oracle DB 12.1c(AL32UTF8)的表中加载该文件。
declare
f Utl_File.File_Type;
v_Buffer varchar2(1000);
v_Table Parse.Varchar2_Table;
v_Nfields integer;
begin
f := Utl_File.Fopen('SA', '1.txt', 'R');
if Utl_File.Is_Open(f) then
loop
begin
Utl_File.Get_Line(f, v_Line, 1000);
if v_Line is null then
exit;
end if;
Parse.Delimstring_To_Table(v_Line, v_Table, v_Nfields, Chr(9));
--insert into ...
end if;
exception
when No_Data_Found then
exit;
end;
end loop;
end if;
Utl_File.Fclose(f);
end;
用这个解析
我在pl / sql开发人员中得到了漂亮(正确)的输出,并显示消息“一个或多个UTF8字段包含非UTF 8数据,编辑可能会产生意想不到的结果”
和Apex 5中的输出不正确。
我可以做点什么吗?我是Trieng转换?甲骨文翻译及更多...
更新1
select *
from nls_database_parameters
where parameter like '%CHARACTERSET%';
PARAMETER VALUE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
UTL_FILE期望以UTL_FILE.FOPEN在文本模式下打开的文件被编码为数据库字符集。
显然不是这样。
使用DBMS_LOB.OPEN()打开一个BFILE(请参阅BFILENAME)作为RAW
值,然后使用UTL_I18N.RAW_TO_CHAR()函数将其转换为VARCHAR2。
然后,您可以使用Parse.Delimstring_To_Table
函数来解析行。
考虑使用EXTERNAL TABLE或SQL * Loader,也许它们更易于使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句