0

ONE.db TWO.db THIRD.dbなどのさまざまなOracleデータベースがあり、ONE.dbなどで正常に実行されるSELECTを実行して、SELECT * FROM CUSTOMERSデータベースごとに結果を取得したいと考えています。PL / SQLを使用してこれを行うにはどうすればよいですか?(dbリンクやツールなどはありません)

4

1 に答える 1

3

個別のデータベース インスタンスではなくスキーマについて話していると仮定し、すべての CUSTOMERS テーブルの構造が (列の順序を含めて) まったく同じであると仮定すると、すべてのテーブルへの SELECT アクセス権を持つユーザーとしてログインできます。

SELECT 'ONE' owner, c.* FROM one.customers c
UNION ALL
SELECT 'TWO' owner, c.* FROM two.customers c
UNION ALL
SELECT 'THIRD' owner, c.* FROM third.customers c
;

最初の列「所有者」が必要かどうかはあなた次第です。

PL/SQL を使用して実行時に上記のステートメントを生成する場合は、次のようにすることができます。

DECLARE
  qry VARCHAR2(32767);
  rc sys_refcursor;
BEGIN
  FOR r IN (SELECT owner, table_name
            FROM all_tables
            WHERE table_name = 'CUSTOMERS') LOOP
    IF qry IS NOT NULL THEN
      qry := qry || ' UNION ALL ';
    END IF;
    qry := qry || 'SELECT '''
               || r.owner
               || ''' owner, c.* FROM '
               || r.owner
               || '.customers c';
  END LOOP;
  OPEN rc FOR qry;
  -- fetch from the ref cursor and do whatever you want with the records
END;
于 2012-08-23T03:28:47.560 に答える