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