2

.NET では、ネストされたクエリを 2 つの別々の Oracle データベースから実行できますか?

例えば

"SELECT my_value, FROM table_in_database_1 WHERE my_value IN (SELECT my_value FROM table_in_database_2 )"

もしそうなら、どうすればこれを行うことができますか?

最終的に、これは、クエリを複数の「OR 値 IN」リストに分割することなく、条件付きリストに 1000 を超えるアイテムを含む「in」ステートメントを使用することによる「ORA-01795」エラーを解決するための取り組みです。

4

3 に答える 3

1

データベース リンクを構築してそのリンクを介して参加するだけで済む場合もありますが、パフォーマンスの問題が発生する可能性があります。このようなもの:

データベース 1 でデータベース 2 へのリンクを構築します。

CREATE DATABASE LINK db2 CONNECT TO user IDENTIFIED BY pw USING tns-alias;

データベース 1 のテーブルをデータベース 2 のテーブルに結合します。

SELECT my_value 
  FROM table_in_database_1 t1 JOIN table_in_database_2@db2 t2
       ON t1.my_value = t2.my_value

リンクのパフォーマンスに応じて、データベース リンクと一時テーブルの両方を含むハイブリッド アプローチを使用することを選択できます。

上記のようにデータベース リンクを作成します。データベース 2 からのサブクエリで使用される値を保持する一時テーブルをデータベース 1 に作成します。

CREATE GLOBAL TEMPORARY TABLE db2_values (value VARCHAR2(20));

値を db2 から db1 にコピーします。

INSERT INTO db2_values
SELECT my_value 
  FROM table_in_database_2@db2;

最後に、データベース 1 のテーブルを一時テーブルに結合します。

SELECT my_value
  FROM table_in_database_1 t1 JOIN db2_values t2 ON t1.my_value = t2.value;
于 2011-07-21T16:28:46.820 に答える
1

データベース リンクを作成できない場合は、database_1 の一時テーブルに SELECT my_value FROM table_in_database_2それ以降のすべての値を挿入して結合することもできます。

于 2011-07-21T15:24:16.270 に答える
0

はい。これについては、データベース リンクを調べることができます。

于 2011-07-21T14:51:28.337 に答える