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@db_name -
INSERT destination_table -
USING query;
次の例では、ローカルのOracleのemp表からすべての行が選択され、Oracle以外のデータベースのemp表に挿入され、トランザクションがコミットされます。
COPY FROM SCOTT@inst1 - INSERT EMP@remote_db - USING SELECT * FROM EMP;
COPYコマンドでは、APPEND、CREATE、INSERTおよび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ユーザーズ・ガイドおよびリファレンス』を参照してください