2007年5月31日 星期四

SQL*Plus COPY 命令筆記

透過 SQL*Plus(9iR2) COPY 命令可以直接在不同資料庫間複製表格內容,支援模式如下:

  1. 由本地資料庫至遠端資料庫 (預設)
  2. 由遠端資料庫至本地資料庫
  3. 由遠端資料庫至遠端資料庫

來源表格欄位支援以下資料型態:CHAR、DATE、LONG、NUMBER、VARCHAR2,但不支援 LOB 這類資料型態。

SQL*Plus COPY 語法

COPY {FROM database | TO database | FROM database TO database} {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)] USING query

參數說明:

FROM database 指定資料來源資料庫
TO database 指定目標資料庫
database 以 username[/password] @connect_identifier 格式指定
APPEND 會直接將複製資料INSERT至指定目的表格,如果指定目的表格不存在會先建立指定目的表格。
CREATE 複製資料前會先建立指定目的表格,如果指定目的表格已經存在會傳回錯誤訊息。
INSERT 如果指定目的表格已經存在會傳回錯誤訊息,使用這個選項必須指定欄位名稱。
REPLACE 如果指定目的表格已經存在會刪除舊有的表格,如果不存在則複製資料前會建立表格。
destination_table 指定目的表格名稱。
(column, column, column, ...) 以逗點隔開的目的表格的資料欄別名。
USING query 任何有效的 SQL SELECT 敘述句。

通常 COPY 指令是用於 Oracle 和 non-Oracle 資料庫間的表格複製,因此如果同樣是在 ORACLE,應該使用 SQL 指令 (CREATE TABLE AS 和 INSERT) 。

Usage:
To enable the copying of data between Oracle and non-Oracle databases, NUMBER columns are changed to DECIMAL columns in the destination table. Hence, if you are copying between Oracle databases, a NUMBER column with no precision will be changed to a DECIMAL(38) column. When copying between Oracle databases, you should use SQL commands (CREATE TABLE AS and INSERT) or you should ensure that your columns have a precision specified.

The SQL*Plus SET LONG variable limits the length of LONG columns that you copy. If any LONG columns contain data longer than the value of LONG, COPY truncates the data.

SQL*Plus performs a commit at the end of each successful COPY. If you set the SQL*Plus SET COPYCOMMIT variable to a positive value n, SQL*Plus performs a commit after copying every n batches of records. The SQL*Plus SET ARRAYSIZE variable determines the size of a batch.

Some operating environments require that service names be placed in double quotes.

範例:

COPY FROM HR/your_password@HQ TO JOHN/your_password@WEST REPLACE WESTEMPLOYEES USING SELECT * FROM EMPLOYEES

參考文件:

SQL*Plus User's Guide and Reference Release 9.2:Part Number A90842-01:APPEND B:SQL*Plus COPY Command

沒有留言: