是否可以从远程Oracle数据库中读取CLOB?

时间:2010-08-29 11:00:38

标签: database oracle

This answer关于SO的问题说

  

...您可以从远程数据库读取LONG,但无法读取CLOB

我在互联网上没有发现任何相关内容,这是真的吗?任何文档或引用都会有所帮助。

7 个答案:

答案 0 :(得分:5)

在某个上下文中答案是正确的,对于DB链接上的简单select语句,您将收到此错误:

  

ORA-22992 :无法使用从远程表中选择的LOB定位器。

从错误手册:

  

原因:无法引用远程LOB列   操作:删除对远程表中LOB的引用。

我也很难找到关于此的明确文档......但我们在数据仓库中遇到了同样的问题。但是,有几种可用的解决方法,例如pulling the data over or creating a view

答案 1 :(得分:1)

我昨天遇到了同样的麻烦。这是我的解决方案:在romote表上创建一个romote视图,当CLOB cols到来时,使用to_char(),例如to_char(col2)。然后,您可以从视图中选择数据。它可能不是一个好的解决方案,但它确实有效。

答案 2 :(得分:1)

如果两个数据库方案都在同一个Oracle实例中,您可以使用以下解决方法:

select (select <columnName> from dual) <columnName> from <table>@<link>

这将返回与访问本地LOB列相同的内容。

答案 3 :(得分:0)

答案 4 :(得分:0)

@Peter Ilfrich:在尝试访问超过4000字节的任何clobs时,是否会抛出异常?

这有点贬值,但这意味着你可以通过dblink安全地撤回小clobs(&lt; 4000)。

select dbms_lob.substr@<link>((select <columnName> from dual@<link>), 4000, 1)  
  from <table>@<link>  
 where dbms_lob.getlength@<link>((select <columnName> from dual@<link>)) <= 4000;  

使用此PL / SQL包通过dblink 读取CLOB(或BLOB)
 https://github.com/HowdPrescott/Lob_Over_DBLink

答案 5 :(得分:0)

Oracle 12.2最终添加了对distributed LOBs的支持。现在,我们可以通过数据库链接读取诸如CLOB和XMLType之类的数据类型,而无需任何变通方法。

答案 6 :(得分:0)

当dblink中的表是Oracle大数据外部表(在我的情况下是Hive表上的外部表)时,您需要在其上创建实例化视图,并将该实例化视图与上述pl / sql包一起使用:https://github.com/HowdPrescott/Lob_Over_DBLink

适用于> 4000的衣橱。

仅针对CLOB测试!