您是否尝试过使用 DBMS_LOB.CONVERTTOBLOB@remote(....)
但是您可能想要获取远程 CLOB 的某种校验和,以查看当它们从任何原始外部源插入/更新时它们是否正在获得字符集转换。也就是说,如果客户端字符集在插入完成时与数据库字符集不同,则问题可能在您进行选择之前已经发生。
编辑添加。
我能想到的最接近的需要链接另一端的一些对象。首先是在远程端进行转换的函数。其次,呈现数据的“BLOB”视图的视图。这使用了一个虚拟表(基于 v$sql,因为它是我能找到的第一个 CLOB)。我没有理由看到您不能简单地将 CLOB 作为参数传递给函数。
create or replace function ret_blob return blob is
cursor c_1 is
select sql_fulltext, sql_id, length(sql_fulltext)
from v_sql
where sql_id = 'bzmb01whp36wt';
rec_c1 c_1%rowtype;
--
v_blob blob;
v_dest number := 1;
v_src number := 1;
v_lang number := 0;
v_warn number;
--
begin
open c_1;
fetch c_1 into rec_c1;
close c_1;
dbms_lob.createtemporary(v_blob, TRUE);
--
dbms_lob.CONVERTTOBLOB (v_blob, rec_c1.sql_fulltext, DBMS_LOB.LOBMAXSIZE,
v_dest, v_src, DBMS_LOB.DEFAULT_CSID, v_lang, v_warn);
--
dbms_output.put_line(':'||v_warn||'>'||length(v_blob));
--
return v_blob;
end;
/
create view rblob as select ret_blob from dual;
然后,从本地数据库中,执行
create table t as select ret_blob from rblob@remote