建立dblink,clob

时间:2022-12-26 17:08:57

建立dblink的方法,

如果有个测试库A,要访问生产库里的数据,那么可以直接在测试库A里建立一个dblink,然后数据库A就可以直接访问测试库B的数据了。

 -- 删除已有的dblink
drop database link dbl_to_ytj;
-- 建立dblink
create database link dbl_to_ytj
connect to ytjuser identified by "ytjuser"
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.162.128.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ybrssck)
)
)'; -- 从dblink中查询数据,这个时候会报
-- 错,ORA-22992:无法使用从远程表选择的LOB定位符
select * from printserialnum@dbl_to_ytj; -- 查询某个表的所有字段 ,用以查询哪个字段是clob类型
select * from all_tables@dbl_to_ytj where table_name like upper('%printserialnum%'); --解决办法:建立全局临时表,只是建立同样表结构的全局临时表,不插入数据,
create global temporary table gtemp_printserialnum as select * from printserialnum@dbl_to_ytj where 1=2 ;
-- 此时查询为空,
select * from gtemp_printserialnum ;
-- 从远程表里往刚刚建立的全局临时表插入数据,注意:不能提交,提交了之后表里就没数据了,
insert into gtemp_printserialnum select * from printserialnum@dbl_to_ytj ; -- 查询全局临时表的数据,此时这个表里就有数据了,
select * from gtemp_printserialnum; select * from DBA_TAB_COLUMNS ;
select * from dba_tables ; select * from USER_TAB_COLUMNS@dbl_to_ytj where table_name like upper('%printserialnum%');
select id,SICARDNO,CODE,CODENUM,PRINTTYPE,SERIALNUM from printserialnum@dbl_to_ytj;
select printtable,id,SICARDNO,CODE,CODENUM,PRINTTYPE,SERIALNUM from printserialnum@dbl_to_ytj; insert into gtemp_printserialnum (printtable) values (select printtable from printserialnum@dbl_to_ytj);
insert into gtemp_printserialnum (printtable,id) values (1,2);
select * from gtemp_printserialnum for update;
select * from gtemp_printserialnum a where a.printtable is not null;