【发布时间】:2011-04-05 09:34:58
【问题描述】:
【问题讨论】:
【问题讨论】:
答案在特定上下文中是正确的,对于通过数据库链接的简单选择语句,你会得到这个错误:
ORA-22992:无法使用从远程表中选择的 LOB 定位器。
来自错误手册:
原因:无法引用远程 LOB 列。
操作:删除对远程表中 LOB 的引用。
我也很难找到有关这方面的权威文档...但我们刚刚在我们的数据仓库中遇到了同样的问题。但是,有几种解决方法可用,例如pulling the data over or creating a view。
【讨论】:
@Peter Ilfrich:在尝试访问超过 4000 字节的任何 clob 时,这不会引发异常吗?
这有点值得考虑,但这意味着您可以安全地通过 dblink 拉回小的 clob (
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
【讨论】:
select dbms_lob.substr@<link>(<columnName>, 4000, 1) chunk_1, dbms_lob.substr@<link>(<columnName>, 4000, 4001) chunk_2, dbms_lob.substr@<link>(<columnName>, 4000, 8001) chunk_3, ...<etc as needed>... from <table>@<link>
如果两个数据库方案都在同一个 Oracle 实例中,您可以使用以下解决方法:
select (select <columnName> from dual) <columnName> from <table>@<link>
这将返回与访问本地 LOB 列相同的结果。
【讨论】:
我昨天也遇到了同样的麻烦。这是我的解决方案:在 romote 表上创建一个 romote 视图,当 CLOB cols 出现时,使用 to_char(),例如 to_char(col2)。然后您可以从视图中选择数据。这可能不是一个好的解决方案,但它确实有效。
【讨论】:
Oracle 12.2 终于增加了对distributed LOBs 的支持。我们现在可以通过数据库链接读取 CLOB 和 XMLType 等数据类型,而无需任何变通方法。
【讨论】:
当您来自 dblink 的表是 Oracle 大数据外部表(在我的情况下是 Hive 表上的外部表)时,您需要在其上创建一个物化视图并将该物化视图与上述 pl/sql 包一起使用:https://github.com/HowdPrescott/Lob_Over_DBLink
适用于 clob > 4000。
仅针对 CLOB 测试!
【讨论】: