1

Oracle Database Link を使用して、SQL Server からデータをクエリします。クエリは次のようになります。

select *
from tableA@DL_SqlServer a
join tableB@DL_SqlServer b
on a.ID = b.ID

tableA と tableB は大きく、結果は比較的小さいです。インデックスは 2 つのテーブルの両方に作成されるため、このクエリは SQL Server ですばやく実行されます。しかし、SQL Server への Oracle データベース リンクでは非常に低速です。結合操作は SQL Server 側ではなく Oracle 側で実行されると思われるため、インデックスは使用されません。結合された結果が必要なだけなので、クエリ全体を SQL Server で実行し、小さな結果のみを取得することを好みます。SQL Server のリンク サーバーと OPENQUERY 関数を使用すると、この目標を達成できることがわかっています。Oracle Database Linkでこれを行う方法を知りたいです。ありがとう!ところで、私には SQL Sevrer でビューを作成する権限がありません。

4

1 に答える 1

1

ほとんどの場合、DBMS_HS_PASSTHROUGHパッケージを使用する必要があります。何かのようなもの

DECLARE
  l_cursor PLS_INTEGER;
BEGIN
  l_cursor := dbms_hs_passthrough.open_cursor@dblink_to_sql_server;
  dbms_hs_passthrough.parse@dblink_to_sql_server( l_cursor, <<select statement>> );
  while dbms_hs_passthrough.fetch_row@link_to_sql_server(l_cursor) > 0 
  loop
    dbms_hs_passthrough.get_value@dblink_to_sqlserver( l_cursor, 1, <<local variable for first column>> );
    dbms_hs_passthrough.get_value@dblink_to_sqlserver( l_cursor, 2, <<local variable for second column>> );
    ...
  end loop;
  dbms_hs_passthrough.close_cursor@dblink_to_sqlserver( l_cursor );
END;
于 2013-02-16T03:21:56.980 に答える