Oracle 資料庫物件繁多,但「表」與「視圖」是資料存儲與邏輯呈現的雙基石。理解兩者的創建語法、約束機制、權限模型及應用場景,是 DBA 與開發者的必修課。本文系統梳理表與視圖的核心操作,並融入實戰經驗。
CREATE TABLE table_name (
col_name data_type [DEFAULT expr] [COLUMN CONSTRAINT],
...
[TABLE CONSTRAINT]
[TABLE_PARTITION_CLAUSE]
);
關鍵規則:
• 表名/欄位名支援中英,最長 30 字元,同用戶下不可重名
• 單表最多 2000 欄位
• 避免使用保留字
• DEFAULT 設定預設值、COLUMN CONSTRAINT 定義欄位級約束(NOT NULL, UNIQUE, CHECK...)、TABLE CONSTRAINT 定義表級約束(PK, FK, 複合 UNIQUE...)、TABLE_PARTITION_CLAUSE 定義分區策略
CREATE TABLE new_table (new_col1, new_col2) AS
SELECT col1, col2 FROM old_table WHERE condition;
DROP TABLE table_name [CASCADE CONSTRAINTS];
CASCADE CONSTRAINTS 會自動刪除引用該表的外鍵約束,避免「ORA-02449: unique/primary keys referenced by foreign keys」報錯。僅表擁有者或具備 DROP ANY TABLE 權限者可執行。
本質:基於一/多張基表或視圖的 邏輯定義(對應一個 SELECT 查詢),不儲存實體資料。
核心價值:
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view_name [(alias1, alias2...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint_name]]
[WITH READ ONLY];
| 選項 | 說明 | 實戰建議 |
|---|---|---|
| OR REPLACE | 視圖存在時覆蓋,避免 DROP 再 CREATE 導致權限遺失 | 生產環境標配 |
| FORCE | 基表不存在也強制創建 | 部署腳本預建視圖時使用,上線後補建基表 |
| NOFORCE | 基表必須存在(預設) | 常規開發模式 |
| 別名 | 重新命名子查詢輸出欄位 | 統一業務命名規範(如 emp_no → employee_id) |
| WITH CHECK OPTION | DML 操作必須符合視圖 WHERE 條件 | 防止透過視圖寫入「不屬於該視圖」的資料 |
| WITH READ ONLY | 視圖唯讀,禁止 DML | 報表、審計類視圖必加 |
DROP VIEW view_name;
僅移除定義,不影響基表資料。需視圖擁有者或 DROP ANY VIEW 權限。
V_ 前綴 + 業務域(V_HR_EMP_SALARY)表是資料的「骨架」,視圖是資料的「面孔」。扎實掌握 DDL 語法、約束機制、視圖進階選項,並落地命名、權限、文檔等工程化規範,才能構建可維護、高安全、易擴充的 Oracle 資料架構。從今天開始,把每一個 CREATE TABLE/VIEW 都當作系統穩定性的基石來對待。