建立dblink,clob
建立dblink的方法,
如果有个测试库A,要访问生产库里的数据,那么可以直接在测试库A里建立一个dblink,然后数据库A就可以直接访问测试库B的数据了。
1 -- 删除已有的dblink 2 drop database link dbl_to_ytj; 3 -- 建立dblink 4 create database link dbl_to_ytj 5 connect to ytjuser identified by "ytjuser" 6 using '(DESCRIPTION = 7 (ADDRESS_LIST = 8 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.162.128.2)(PORT = 1521)) 9 ) 10 (CONNECT_DATA = 11 (SERVICE_NAME = ybrssck) 12 ) 13 )'; 14 15 16 -- 从dblink中查询数据,这个时候会报 17 -- 错,ORA-22992:无法使用从远程表选择的LOB定位符 18 select * from printserialnum@dbl_to_ytj; 19 20 -- 查询某个表的所有字段 ,用以查询哪个字段是clob类型 21 select * from all_tables@dbl_to_ytj where table_name like upper('%printserialnum%'); 22 23 --解决办法:建立全局临时表,只是建立同样表结构的全局临时表,不插入数据, 24 create global temporary table gtemp_printserialnum as select * from printserialnum@dbl_to_ytj where 1=2 ; 25 -- 此时查询为空, 26 select * from gtemp_printserialnum ; 27 -- 从远程表里往刚刚建立的全局临时表插入数据,注意:不能提交,提交了之后表里就没数据了, 28 insert into gtemp_printserialnum select * from printserialnum@dbl_to_ytj ; 29 30 -- 查询全局临时表的数据,此时这个表里就有数据了, 31 select * from gtemp_printserialnum; 32 33 34 select * from DBA_TAB_COLUMNS ; 35 select * from dba_tables ; 36 37 38 select * from USER_TAB_COLUMNS@dbl_to_ytj where table_name like upper('%printserialnum%'); 39 select id,SICARDNO,CODE,CODENUM,PRINTTYPE,SERIALNUM from printserialnum@dbl_to_ytj; 40 select printtable,id,SICARDNO,CODE,CODENUM,PRINTTYPE,SERIALNUM from printserialnum@dbl_to_ytj; 41 42 43 insert into gtemp_printserialnum (printtable) values (select printtable from printserialnum@dbl_to_ytj); 44 insert into gtemp_printserialnum (printtable,id) values (1,2); 45 select * from gtemp_printserialnum for update; 46 select * from gtemp_printserialnum a where a.printtable is not null;