我正在开发一种将文本文件导入 BLOB 列 (OracleDB) 的工具。这是通过带有文件浏览按钮和连接的导入程序的 Apex 页面处理的。
有关导入到 BLOB 程序的更多详细信息:http: //ittichaicham.com/2011/03/file-browser-in-apex-4-with-blob-column-specified-in-item-source-attribute/
我使用的文本文件包含特殊字符、空值、十进制分隔符等。例如:
(...) 111888|Overflakkée, Blabla|罗纳河街道名||12-13|UXC 地名 (...)
由于它都是字符数据,我正在使用以下过程将 BLOB 转换为 CLOB:
FUNCTION blob_to_clob (blob_in IN BLOB)
RETURN CLOB
AS
v_clob CLOB;
v_varchar VARCHAR2(32767);
v_start PLS_INTEGER := 1;
v_buffer PLS_INTEGER := 32767;
BEGIN
DBMS_LOB.CREATETEMPORARY(v_clob, TRUE);
FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer)
LOOP
v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start));
DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar);
v_start := v_start + v_buffer;
END LOOP;
RETURN v_clob;
END blob_to_clob;
有关更多信息,请参阅:http ://www.dba-oracle.com/t_convert_blob_to_clob_script.htm
问题:在将 blob 转换为 clob 时,一些特殊字符会丢失/更改。
例如,这一行:
(...) 111888|Overflakkée, Blabla|罗纳河街道名||12-13|UXC 地名 (...)
将成为这一行:
(...) 111888|Overflakk. Blabla|Rh 的街道名称|12-13|UXC 地名 (...)
行长、字符甚至分隔符(在本例中为“|”)都被更改/不可见。
- 有没有办法获得丢失的字符+保持分隔符/空值到位?(如果有必要将'é'更改为'e',那很好)。
- 有没有更有效的方法将文本文件导入 BLOB/CLOB 列?
问候