14

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

これは文書化された制限です。

同じページでは、値をローカル テーブルにフェッチすることを提案していますが、それは...ちょっと面倒です。

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

他のアイデアはありますか?

4

6 に答える 6

16

column_b が BLOB の場合、以下のクエリを使用することによる最適なソリューション:

SELECT (select column_b from sample_table@TEST_LINK) AS column_b FROM DUAL
于 2013-01-27T13:06:25.573 に答える
5

ええ、それは厄介です、しかし私はそれを避ける方法を考えることができません。
一時テーブルの作成をストアドプロシージャに入れることで(そして「即時実行」を使用してテーブルを作成することで)、クライアントから混乱の一部を隠すことができます。
注意が必要なことの1つは、一時テーブルに残っていることです(何かが失敗した場合)セッションの途中で、クリーンアップする前に)-Oracleジョブをスケジュールして、残りのテーブルを定期的に実行して削除することができます。

于 2008-09-02T17:53:52.493 に答える
2

クエリ データの場合、user2015502 のソリューションが最もスマートです。LOB のATをリモート データベースに挿入または更新する場合 (xxx@yyy に挿入 ...)、そのために動的 SQL を簡単に使用できます。ここで私のソリューションを参照してください:

于 2016-10-06T11:12:51.123 に答える
1

マテリアライズド ビューを使用して、すべての「キャッシュ」管理を処理できます。完璧ではありませんが、ほとんどの場合に機能します:)

于 2008-11-19T19:12:28.293 に答える
0

特定のシナリオを念頭に置いていますか?たとえば、LOB がファイルを保持していて、会社のイントラネットを使用している場合、ネットワーク上の既知のディレクトリにファイルを抽出し、そこからアクセスするためのストアド プロシージャを作成できます。

于 2008-09-01T16:35:58.507 に答える
0

この特定のケースでは、2 つのシステムが通信できる唯一の方法は、dblink を使用することです。

また、テーブルの解決策はそれほどひどいものではありません。dblink の側でデータを「キャッシュ」する必要があるのは面倒です。

于 2008-09-01T16:39:51.277 に答える