SELECT 不只是查詢,配合 CREATE TABLE 還能完成 DDL 級操作。本文介紹三種進階用法,分別解決「只要結構」、「要資料且可刷新」、「要結構加資料」三類需求。
CREATE TABLE new_table_name AS
(SELECT * FROM source_table)
DEFINITION ONLY;
CREATE TABLE new_table_name AS
(SELECT * FROM source_table)
DATA INITIALLY DEFERRED REFRESH DEFERRED;
REFRESH TABLE new_table_name;
Q (Query),但可像一般表一樣查詢DATA INITIALLY DEFERRED:建立時不載入資料REFRESH DEFERRED:手動控制刷新時機(REFRESH TABLE)CURRENT REFRESH AGE = ANY)CREATE TABLE new_table_name LIKE source_table;
DEFINITION ONLY 更完整保留 Identity/Generated 定義| 需求 | 指令 | 有資料 | 可刷新 | 保留 Identity | 表類型 |
|---|---|---|---|---|---|
| 只要結構,後續自建索引/約束 | AS ... DEFINITION ONLY | ❌ | ❌ | ❌ | T (Table) |
| 要資料、需定期同步、優化器可用 | AS ... DATA INITIALLY DEFERRED REFRESH DEFERRED | ✅ (手動刷新) | ✅ | ✅ | Q (MQT) |
| 要結構+Identity/Generated,不需資料 | LIKE | ❌ | ❌ | ✅ | T (Table) |
REFRESH TABLE ... ALLOW WRITE ACCESS(V10.5+)。LIKE 不複製權限,部署後記得 GRANT。RUNSTATS。「DEFINITION ONLY 快建骨架、LIKE 完整複製定義、MQT 預計算加速查詢」——三招組合,涵蓋開發、測試、生產環境的多數建表需求,讓 DBA 遠離繁瑣的手工 DDL。