異機種間サービスでは、コールバック・リンクがサポートされます。これにより、次のような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
コマンドでは、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ユーザーズ・ガイドおよびリファレンス』を参照してください