oracle中,使用数据库连接(DbLink),源表中的CLOB等大字段是不能在select语句中展现出来的。比如说,有个源表tsource,里面有个大字段photo,那么运行以下语句会报错:
select * from tsource@dblink1;
那怎么办呢?可以将该表的数据拷贝到本地库。就是这么怪,不能展示,但能传输:
create table mysource as select * from tsource@dblink1;
select * from mysource;--有了,爽歪歪
当然,现实场景中,可能会搞个JOB,同步表之类。但原理都一样,将数据复制到本地。
2020.12.17
这个远程数据库表一旦含有LOB字段就非常麻烦,不能与本地表做inner join等连接操作,如
insert into work.alert_project_change(pro_id,sat_id,sat_usearea,sat_userara_old,sat_bookdate,status,createdate)
select lc.pro_id,lc.sat_id,r.sat_usearea,lc.sat_usearea,r.sat_bookdate,1,sysdate
from hydg.sas_tit_seaareacertif@hn r
inner join sas_tit_seaareacertif lc on r.sat_id=lc.sat_id
where r.sat_usearea<>lc.sat_usearea;
尽管插入的字段、用于连接的字段都不是LOB类型,但因为表hydg.sas_tit_seaareacertif@hn 含有LOB字段,以上语句仍然报 ORA-22992 的错误。需要改成:
insert into work.alert_project_change(pro_id,sat_id,sat_usearea,sat_userara_old,sat_bookdate,status,createdate)
select pro_id,sat_id,sat_usearea,sat_usearea as sat_userara_old,sat_bookdate,1 as status,sysdate as createdate
from hydg.sas_tit_seaareacertif@hn r
where sat_id in(select sat_id from sas_tit_seaareacertif lc where sat_id=r.sat_id and sat_usearea<>r.sat_usearea);