当前位置: 代码迷 >> Oracle开发 >> 用dblink查询数据,发现查询不已,是什么为题
  详细解决方案

用dblink查询数据,发现查询不已,是什么为题

热度:82   发布时间:2016-04-24 06:30:19.0
用dblink查询数据,发现查询不了,是什么为题啊
我想查询另一台服务器上面oracel的数据,用dblink 出现图中的错误,请问该如何解决
------解决思路----------------------
本帖最后由 bw555 于 2015-01-13 15:02:08 编辑
不能通过dblink访问lob类型,数据库本身的限制,考虑其他方式吧
------解决思路----------------------
LOB 类型的列,不能通过 DBLINK 的方式读取,如果这列数据,对你来说没用的话,建议使用 具体列名,不要用 星号( *) 了,非要取的话,有一个办法:

A机,建立了一个 dblink 到了 B机, 此时,你 select * from table@B ,出错了,就是你现在的情况。
B机,建立一个 dblink 到 A 机,你可以 insert into table@A select * from table 。 这个没有问题。
------解决思路----------------------
引用:
Quote: 引用:

LOB 类型的列,不能通过 DBLINK 的方式读取,如果这列数据,对你来说没用的话,建议使用 具体列名,不要用 星号( *) 了,非要取的话,有一个办法:

A机,建立了一个 dblink 到了 B机, 此时,你 select * from table@B ,出错了,就是你现在的情况。
B机,建立一个 dblink 到 A 机,你可以 insert into table@A select * from table 。 这个没有问题。
是的,可以,要是我跨库调用oracel的存储过程,该怎么样调用呢


调用存储过程,就是直接调用就可以了,数据必须先提取过来,让对方主动写。
------解决思路----------------------
可以在本地建一个临时表,先将远程的数据copy过来,再对临时表查询:

SQL> create global temporary table test(X BLOB);

SQL> insert into test select blobcolumn from remoteTable@dl_remote where rownum = 1;

插入本地临时表之后,在本地的操作就没有任何问题了。
------解决思路----------------------
楼上说的对,可以用临时表过度下。
注意此处 insert into temp select  *  from table_name@db_link; 用select * 方式(即须把表结构弄成一样),不然有可能会报错。