建立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;

 

posted @ 2016-04-08 16:03  Sunor  阅读(1015)  评论(0编辑  收藏  举报