Можно ли прочитать CLOB из удаленной базы данных Oracle? - PullRequest
7 голосов
/ 29 августа 2010

Этот ответ на вопрос о SO говорит

... вы можете прочитать LONG из удаленной базы данных, но вы не можете прочитать CLOB

Я ничего не нашел в интернете, правда? Любая документация или цитаты для этого будут полезны.

Ответы [ 6 ]

5 голосов
/ 29 августа 2010

Ответ правильный в определенном контексте, для простых операторов выбора по ссылке в БД вы получите эту ошибку:

ORA-22992 : невозможно использовать LOBлокаторы, выбранные из удаленных таблиц.

Из руководства по ошибкам:

Причина : на удаленный столбец больших объектов нельзя ссылаться.
Действие : удаление ссылок на большие объекты в удаленных таблицах.

У меня также были проблемы с поиском полной документации по этому вопросу ... но мы только столкнулись с той же проблемой в нашем хранилище данных.Тем не менее, существует несколько способов обхода, например , перетаскивание данных или создание представления .

1 голос
/ 25 сентября 2018

В Oracle 12.2 наконец добавлена ​​поддержка распределенных больших объектов .Теперь мы можем читать типы данных, такие как CLOB и XMLType, по ссылкам базы данных без каких-либо обходных путей.

1 голос
/ 07 декабря 2013

Если обе схемы БД находятся в одном и том же экземпляре Oracle, вы можете использовать следующий обходной путь:

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

Это вернет вас так же, как если бы вы обращались к локальному столбцу больших объектов.

1 голос
/ 26 мая 2013

У меня вчера была такая же проблема. Это Мое решение: создать представление romote на таблице romote, когда приходит cols CLOB, используйте to_char (), например to_char (col2) Затем вы можете выбрать данные в представлении. Возможно, это не очень хорошее решение, но оно работает.

0 голосов
/ 22 июня 2017

@ Питер Ильфрич: Разве это не вызывает исключение при попытке получить доступ к любым сгусткам длиной более 4000 байт?

Это немного более ценно, но это означает, что вы можете безопасно отбрасывать небольшие сгустки (<4000) по линии связи dblink. </p>

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;  

Чтение CLOB (или BLOB) по ссылке dblink возможно с этим пакетом PL / SQL:
https://github.com/HowdPrescott/Lob_Over_DBLink

0 голосов
/ 01 августа 2016

Вы можете создать материализованное представление из удаленной таблицы, а затем использовать его для своих нужд

https://webcache.googleusercontent.com/search?q=cache:LG2eG1gThV8J:https://community.oracle.com/thread/471047%3Fstart%3D0%26tstart%3D0+&cd=2&hl=en&ct=clnk&gl=ir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...