Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 是否可以从远程Oracle数据库读取CLOB?_Database_Oracle - Fatal编程技术网

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

Database 是否可以从远程Oracle数据库读取CLOB?,database,oracle,Database,Oracle,关于这样说的一个问题 。。。您可以从远程数据库读取LONG,但无法读取CLOB 我在网上没有找到任何关于这个的东西,是真的吗?这方面的任何文档或记录都会很有帮助。答案在特定上下文中是正确的,对于DB链接上的简单select语句,您将得到以下错误: ORA-22992:无法使用从远程表中选择的LOB定位器 从错误手册: 原因:无法引用远程LOB列。 操作:删除对远程表中LOB的引用 我也很难找到这方面的权威文档……但我们的数据仓库也遇到了同样的问题。但是,例如,有几种解决办法。我昨天也遇到了同样的

关于这样说的一个问题

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


我在网上没有找到任何关于这个的东西,是真的吗?这方面的任何文档或记录都会很有帮助。

答案在特定上下文中是正确的,对于DB链接上的简单select语句,您将得到以下错误:

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

从错误手册:

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


我也很难找到这方面的权威文档……但我们的数据仓库也遇到了同样的问题。但是,例如,有几种解决办法。

我昨天也遇到了同样的问题。这是我的解决方案:在romote表上创建一个romote视图,当CLOB列出现时,使用to_char,例如to_charcol2。然后可以从视图中选择数据。这可能不是一个好的解决方案,但它可以工作。

如果两个DB方案位于同一个Oracle实例中,您可以使用以下解决方法:

从双重选择@


这将返回与访问本地LOB列相同的结果。

您可以从远程表创建物化视图,然后根据需要使用该视图


@Peter Ilfrich:当试图访问任何超过4000字节的CLOB时,这不会引发异常吗

这更容易理解,但这意味着您可以通过dblink安全地撤回小于4000的小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:

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

如果您的dblink表是Oracle大数据外部表(在我的例子中是配置单元表上的外部表),则需要在其上创建一个物化视图,并将该物化视图与上述pl/sql包一起使用:

适用于CLOB>4000


只测试CLOB

出于某种奇怪的原因,它在视图中不起作用,但在我的案例中却导致了一个解决方案。谢谢哪个是什么?这是我的问题的一些填充文本。当所有其他方法都失败时,这对我来说是有效的。谢谢。更正:我可以使用上面的包查询表,但是CLOB列是空的。最后-上面的代码确实可以获得前4000个字符。这对我来说也很有效,并且能够通过将下一个块分串来提取4000多个:选择dbms_lob.substr@,4000,1 chunk_1,dbms_lob.substr@,4000,4001 chunk_2,dbms_lob.substr@,40008001 chunk_3。。。。。。从@