表をコピーしたい場合、CREATE TABLE文にAS SELECT * FROM 表名を付与します。
SQL> SELECT * FROM regions;
REGION_ID REGION_NAME
---------- ---------------------------------------------------------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
regionsという表をコピーして新規にregions2という表を作成します。
SQL> CREATE TABLE regions2 NOLOGGING PARALLEL
2 AS SELECT * FROM regions;
表が作成されました。
regionsのコピーであるregions2表が作成されました。
なお、NOLOGGING PARALLELを付与することで高速に表を作成できます。
SQL> SELECT * FROM regions2;
REGION_ID REGION_NAME
---------- ---------------------------------------------------------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
データもコピーされています。
なお、AS SELECT~にWHERE 1 <> 1という条件式を付与することで表の構造だけをコピーすることが出来ます。
SQL> SELECT constraint_name,constraint_type,table_name,status FROM user_constraints
2 WHERE table_name = 'REGIONS';
CONSTRAINT_NAME CON TABLE_NAME STATUS
-------------------- --- -------------------- ------------------------
REGION_ID_NN C REGIONS ENABLED
REG_ID_PK P REGIONS ENABLED
SQL> SELECT constraint_name,constraint_type,table_name,status FROM user_constraints
2 WHERE table_name = 'REGIONS2';
CONSTRAINT_NAME CON TABLE_NAME STATUS
-------------------- --- -------------------- ------------------------
SYS_C0012243 C REGIONS2 ENABLED
データはコピーされましたが、primaryキー制約に関してはコピーされません。
NOT NULL制約はコピーされています。
SQL> SELECT index_name, table_owner, table_name, status FROM user_indexes
2 WHERE table_name = 'REGIONS';
INDEX_NAME TABLE_OWNER TABLE_NAME STATUS
-------------------- -------------------- -------------------- ------------------------
REG_ID_PK HR REGIONS VALID
SQL> SELECT index_name, table_owner, table_name, status FROM user_indexes
2 WHERE table_name = 'REGIONS2';
レコードが選択されませんでした。
INDEXも同様にコピーされていません。
CREATE文の実行後に対処する必要があります。
SQL> SELECT * FROM regions;
REGION_ID REGION_NAME
---------- ---------------------------------------------------------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
regionsという表をコピーして新規にregions2という表を作成します。
SQL> CREATE TABLE regions2 NOLOGGING PARALLEL
2 AS SELECT * FROM regions;
表が作成されました。
regionsのコピーであるregions2表が作成されました。
なお、NOLOGGING PARALLELを付与することで高速に表を作成できます。
SQL> SELECT * FROM regions2;
REGION_ID REGION_NAME
---------- ---------------------------------------------------------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
データもコピーされています。
なお、AS SELECT~にWHERE 1 <> 1という条件式を付与することで表の構造だけをコピーすることが出来ます。
SQL> SELECT constraint_name,constraint_type,table_name,status FROM user_constraints
2 WHERE table_name = 'REGIONS';
CONSTRAINT_NAME CON TABLE_NAME STATUS
-------------------- --- -------------------- ------------------------
REGION_ID_NN C REGIONS ENABLED
REG_ID_PK P REGIONS ENABLED
SQL> SELECT constraint_name,constraint_type,table_name,status FROM user_constraints
2 WHERE table_name = 'REGIONS2';
CONSTRAINT_NAME CON TABLE_NAME STATUS
-------------------- --- -------------------- ------------------------
SYS_C0012243 C REGIONS2 ENABLED
データはコピーされましたが、primaryキー制約に関してはコピーされません。
NOT NULL制約はコピーされています。
SQL> SELECT index_name, table_owner, table_name, status FROM user_indexes
2 WHERE table_name = 'REGIONS';
INDEX_NAME TABLE_OWNER TABLE_NAME STATUS
-------------------- -------------------- -------------------- ------------------------
REG_ID_PK HR REGIONS VALID
SQL> SELECT index_name, table_owner, table_name, status FROM user_indexes
2 WHERE table_name = 'REGIONS2';
レコードが選択されませんでした。
INDEXも同様にコピーされていません。
CREATE文の実行後に対処する必要があります。

コメント