答案 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测试!