首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料表複製語法完整指南:結構、資料與指定欄位

     編輯:Oracle 資料庫基礎

在 Oracle 資料庫管理中,複製資料表是常見的操作需求。無論是為了備份、測試或是建立新環境,掌握 CREATE TABLE AS SELECT (CTAS) 的各種用法都能大幅提升工作效率。本文將系統整理四種核心複製場景,並說明索引遺失的補救方式。

1. 僅複製表結構(不含資料)

利用永遠為假的條件 WHERE 1 <> 1,讓查詢不回傳任何列,僅保留欄位定義:

CREATE TABLE b AS SELECT * FROM a WHERE 1 <> 1;

新表 b 將擁有與 a 相同的欄位名稱、資料型態與 NOT NULL 約束,但不包含主鍵、唯一鍵、外鍵、索引等物件。

2. 同時複製結構與資料

最簡單的完整複製語法:

CREATE TABLE b AS SELECT * FROM a;

執行後,b 將包含 a 所有資料列,適用於快速建立測試資料集。

3. 複製指定欄位結構(不含資料)

在 SELECT 列表中明確列出所需欄位,搭配 WHERE 1 <> 1:

CREATE TABLE b AS SELECT row_id, name, age FROM a WHERE 1 <> 1;

前提是 row_id、name、age 皆為 a 表現有欄位。

4. 複製指定欄位及其資料

移除 WHERE 條件即可帶入實際資料:

CREATE TABLE b AS SELECT row_id, name, age FROM a;

5. 將查詢結果寫入既有表

若目標表已存在,改用 INSERT INTO ... SELECT:

INSERT INTO t2 (column1, column2, ...)
SELECT column1, column2, ... FROM t1;

欄位順序與型態必須一一對應,否則會報錯。

重要提醒:索引與約束不會自動複製

CTAS 僅複製「欄位定義」與「資料」,不會帶過主鍵、唯一索引、外鍵、普通索引、Check 約束等。建立新表後,請手動補齊:

  • 查詢原表索引:SELECT * FROM user_indexes WHERE table_name = 'A';
  • 依序重建 CREATE INDEX ...、ALTER TABLE ... ADD CONSTRAINT ...

快速對照表

需求SQL 範例結果
只複製結構CREATE TABLE b AS SELECT * FROM a WHERE 1<>1;空表,同欄位定義
結構+全部資料CREATE TABLE b AS SELECT * FROM a;完整副本
指定欄位結構CREATE TABLE b AS SELECT col1,col2 FROM a WHERE 1<>1;空表,僅含指定欄位
指定欄位+資料CREATE TABLE b AS SELECT col1,col2 FROM a;含資料的子集表
寫入既有表INSERT INTO t2 SELECT ... FROM t1;追加資料

掌握這五種模式,即可應付絕大多數 Oracle 資料表複製場景。實務上建議搭配 DBMS_METADATA.GET_DDL 取得完整 DDL,一次完成結構、索引、約束的遷移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved