如果创建Oracle dblink,则无法直接访问目标表中的LOB列。

例如,使用以下命令创建一个dblink:

create database link TEST_LINK
  connect to TARGETUSER IDENTIFIED BY password using 'DATABASESID';


之后,您可以执行以下操作:

select column_a, column_b
from data_user.sample_table@TEST_LINK


除非该列是LOB,否则您将收到错误:

ORA-22992: cannot use LOB locators selected from remote tables


这是a documented restriction

同一页上建议您将值提取到本地表中,但这有点...

CREATE TABLE tmp_hello
AS SELECT column_a
from data_user.sample_table@TEST_LINK


还有其他想法吗?

最佳答案

是的,这很混乱,不过我想不出办法避免这种情况。
您可以通过将临时表创建放入存储过程中(并使用“立即执行”来创建表)来向客户端隐藏一些混乱情况。
您需要注意的一件事是保留在临时表上(如果在会话进行中途某件事失败,而您没有时间清理它)-您可以安排一个oracle作业来定期运行并删除所有遗留的表。

关于sql - 在Oracle分布式数据库中处理LOB的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38074/

10-10 03:39