在 Oracle 開發與維護中,依據現有資料表結構或資料建立新表是高頻操作。本文系統整理五種典型複製場景,提供標準 SQL 語法與實務注意事項,助您精準選擇最適方案。
CREATE TABLE b AS SELECT * FROM a WHERE 1 <> 1;
利用永假條件 1 <> 1 使查詢不回傳任何列,僅保留欄位定義、資料型態與 NOT NULL 約束。注意:索引、主鍵、外鍵、檢查約束等不會被複製,需手動補建。
CREATE TABLE b AS SELECT * FROM a;
最常用的一鍵複製語法,新表將擁有相同欄位與完整資料集。同樣不複製索引與約束。
CREATE TABLE b AS SELECT row_id, name, age FROM a WHERE 1 <> 1;
前提是 row_id, name, age 均為表 a 的實際欄位。適用於依據業務需求抽取部分欄位建立新表結構。
CREATE TABLE b AS SELECT row_id, name, age FROM a;
結合場景二與三,精準控制新表的欄位集合與資料內容。
INSERT INTO t2 (column1, column2, ...)
SELECT column1, column2, ... FROM t1;
適用於目標表 t2 已存在結構,需從 t1 同步或遷移資料的情境。欄位順序與型態必須一一對應。
所有 CREATE TABLE ... AS SELECT (CTAS) 語法均不會複製:
複製完成後,請依原表定義使用 ALTER TABLE 或 CREATE INDEX 補齊相關物件,確保資料完整性與查詢效能。
在場景二與四中,可直接加入 WHERE 條件過濾資料,例如:
CREATE TABLE b AS SELECT * FROM a WHERE create_date >= DATE '2024-01-01';
這在歷史資料歸檔、分區表建立等場景極為實用。