ヘッダーをスキップ
Oracle® Database Heterogeneous Connectivityユーザーズ・ガイド
12cリリース1 (12.1)
E52376-02
  目次へ移動
目次
索引へ移動
索引

前
次へ
 

Oracleデータベース・サーバーからOracle以外のデータベース・システムへのデータのコピー

異機種間サービスでは、コールバック・リンクがサポートされます。これにより、次のようなSQL文を実行できます。

INSERT INTO table_name@dblink SELECT column_list FROM table_name;

異機種間サービスではコールバック機能がサポートされますが、この機能が実装されていないゲートウェイもあります。使用中のゲートウェイにこの機能が実装されていない場合、前述のINSERT文では次のエラー・メッセージが戻されます。

ORA-02025: All tables in the SQL statement must be at the remote database

関連項目:

コールバック・リンクのサポートについては、ゲートウェイのマニュアルを参照してください。

コールバック・リンクをサポートしていないゲートウェイの場合は、SQL*PlusのCOPYコマンドを使用できます。構文は次のとおりです。

COPY FROM username/password@db_name -
   INSERT destination_table -
   USING query;

次の例では、ローカルのOracleのemp表からすべての行が選択され、Oracle以外のデータベースのemp表に挿入され、トランザクションがコミットされます。

COPY FROM SCOTT/TIGER@inst1 -
  INSERT EMP@remote_db -
  USING SELECT * FROM EMP;

COPYコマンドでは、APPENDCREATEINSERTおよびREPLACEオプションがサポートされます。ただし、INSERTはOracle以外のデータベースにコピーする場合のみサポートされるオプションです。SQL*PlusのCOPYコマンドでは、名前が小文字の表へのコピーはサポートされません。小文字の表名に対しては次のPL/SQL構文を使用します。

DECLARE
    v1 oracle_table.column1%TYPE;
    v2 oracle_table.column2%TYPE;
    v3 oracle_table.column3%TYPE;
    .
    .
    .
    CURSOR cursor_name IS SELECT * FROM oracle_table;
BEGIN
    OPEN cursor_name;
    LOOP
       FETCH cursor_name INTO v1, v2, v3, ... ;
       EXIT WHEN cursor_name%NOTFOUND;
       INSERT INTO destination_table VALUES (v1, v2, v3, ...);
    END LOOP;

    CLOSE cursor_name;
END;

関連項目:

COPYコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください