|
用途 ローカル・データベースまたはリモート・データベースの表へ、問合せのデータをコピーします。
COPY {FROM username[/password]@database_specification |
TO username[/password]@database_specification |
FROM username[/password]@database_specification TO
username[/password]@database_specification}
{APPEND|CREATE|INSERT|REPLACE} destination_table[(column,
column, column ...)] USING query
項目の説明 次に各項目を説明します。
username[/password]
複写元(FROM句)および複写先(TO句)のユーザー名/パスワードを指定します。FROM句およびTO句のどちらの句も、
パスワードを指定しないと、入力要求が表示されます。入力したパスワードは画面表示されません。
database_specification
接続するノード名およびデータベースを指定します。FROM句にはコピー元の、TO句には複写先となるデータベー
スを指定します。使用しているコンピュータのSQL*Net通信プロトコルに応じた構文を使用します。詳細について
は、使用しているプロトコルのSQL*Netマニュアルを参照するか、または担当のDBAに相談してください。
destination_table
データを作成、追加する表を指定します。
(column, column, column...)
destination_tableに指定した表の列名を指定します。小文字または空白を含める場合、列名を2重引用符で囲みます。
列は、問合せの列と同じ数だけ指定しなければなりません。COPYコマンドによって
destination_tableが作成される場合、列を指定しない際には、複写先の表の列名には複写元と同様の名前が自動的
に命名されます。
USING query コピーする行および列を指定するSQL問合せ(SELECTコマンド)を指定します。
FROM username[/password][ @database_specification]
ユーザー名、パスワード、およびコピーするデータを含むデータベースを指定します。FROM句を指定しない場合、
複写元のデータベースとして、SQL*Plusが接続されているデータベース(すなわち、他のコマンドによって指定され
ているデータベース)が採用されます。これはデフォルトです。複写元および複写先のデータベースを設定するため
には、FROM句とTO句の両方を指定しなければなりません。
TO username[/password][ @database_specification]
複写先の表を含むデータベースを指定します。TO句を指定しない場合、複写先として、SQL*Plusが接続されている
データベース(すなわち、他のコマンドによって指定されているデータベース)が指定されます。複写元および複写
先のデータベースを設定するためには、FROM句とTO句の両方を指定しなければなりません。
APPEND 表が存在する場合、問合せから行をdestination_tableに挿入します。destination_tableがない場合は、COPYコマ
ンドによって作成されます。
CREATE まず分作成された後、問合せからdestination_tableに行を挿入します。destination_table
がすでに存在する場合、COPYコマンドによってエラー・メッセージが表示されます。
INSERT 表が存在する場合、問合せからdestination_tableに行を挿入します。destination_tableがない場合、COPYコマンド
によってエラー・メッセージが表示されます。
REPLACE destination_tableから既存の行を削除します。そして、表が存在する場合は、問合せから
destination_tableへ行を挿入します。表がない場合、COPYコマンドによって作成されます。表が存在する場合は、
COPYによって既存の表を削除してから、コピーするデータを含む表に置き換えられます。
使用方法 OracleとOracle以外のデータベースでデータをコピーする場合、NUMBER列は複写先の表でDECIMAL列に変更さ
れます。けれども、Oracleデータベース間でコピーする場合は、精度が指定されていないNUMBER列はDECIMAL(38)列に
変更されます。Oracleデータベース間でデータをコピーする際は、(CREATE TABLE、INSERTなどの)SQLコマンドを使用
して、列に希望する精度が指定されていることを確認してください。
SQL*PlusのSETコマンドで指定するLONG変数により、コピーする列の長さが制限されます。LONG変数に指定した値より
も長いデータを含む列がある場合、COPYコマンドによって、そのデータは切り捨て処理が行われます。
COPYコマンドが正常に実行されると、SQL*Plusにより、各処理の最後にコミットが行われます。SQL*Plus SETコマンド
のCOPYCOMMIT変数のnを正数に指定した場合、レコードがn回、バッチでコピーされるたびにコミットが行われます(バ
ッチのサイズは、SQL*Plus SETコマンドのARRAYSIZE変数を使用して指定します)。
オペレーティング・システムによっては、データベース指定の箇所を二重引用符で囲む必要があるかもしれません。
使用例 次のコマンドを指定して、データベースHQのEMP表全体を、データベース WESTのWESTEMP表にコピーするとします。
WESTEMP表がすでにある場合、その内容が置き換わります。WESTEMPの列の名前は、複写元であるEMP表の列と同様です。
SQL> COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST -
> REPLACE WESTEMP -
> USING SELECT * FROM EMP
次のコマンドを指定して、データベースHQのEMPから選択したレコードを、SQL*Plusが接続されているデータベースにコピーす
るとします。SQL*Plusにより、SALESMENが自動的に作成されます。ここでは、EMPNOおよびENAMEという列をコピーするとします
。複写先でこれらの列の名前をEMPNOおよびSALESMANに置き換えます。
SQL> COPY FROM SCOTT/TIGER@HQ -
> CREATE SALESMEN (EMPNO,SALESMAN) -
> USING SELECT EMPNO, ENAME FROM EMP -
> WHERE JOB='SALESMAN'
| |