| 類型 | 特性 | 範例 | 適用場景 |
| CHAR(n) | 固定長度,空白填充,比較時自動補空白 | CHAR(10) 存 'Tom' 佔 10 位元組 | 固定長度代碼(如身分證字號、國家代碼) |
| NCHAR(n) | Unicode 固定長度,按字元計算 | NCHAR(10) 可存 10 個中文字 | 多語言固定長度欄位 |
| VARCHAR2(n) | 變長,實際長度儲存,4000 位元組上限 | VARCHAR2(100) | 一般文字欄位首選 |
| NVARCHAR2(n) | Unicode 變長 | NVARCHAR2(200) | 多語言變長文字 |
| NUMBER(p,s) | 精度 p,小數位 s;p 最大 38 | NUMBER(8,2) 存 999999.99 | 金額、數量、比率等數值 |
| DATE | 含年月日時分秒,範圍公元前 4712~公元 9999 | SYSDATE, TO_DATE('28-02-08','DD-MM-RR') | 日期時間業務欄位 |
| TIMESTAMP | 含小數秒精度,可帶時區 | TIMESTAMP(6) | 高精度審計、跨時區系統 |
二、 表結構管理核心指令
1. 建表與預設值
CREATE TABLE scott.test6 (
eid NUMBER(10),
name VARCHAR2(20),
hiredate DATE DEFAULT SYSDATE,
salary NUMBER(8,2) DEFAULT 0
);
2. 增加/修改/刪除欄位
-- 增加欄位
ALTER TABLE emp01 ADD (eno NUMBER(4));
-- 修改欄位型別、預設值
ALTER TABLE emp01 MODIFY job VARCHAR2(15) DEFAULT 'CLERK';
-- 刪除欄位
ALTER TABLE emp01 DROP COLUMN dno;
-- 重命名欄位
ALTER TABLE emp01 RENAME COLUMN eno TO empno;
3. 表重命名與註解
RENAME emp01 TO employee;
COMMENT ON TABLE employee IS '存放員工資訊';
COMMENT ON COLUMN employee.name IS '員工姓名';
三、 完整性約束
| 類別 | 約束類型 | 說明 |
| 域完整性 | NOT NULL, CHECK | 限制欄位值域 |
| 實體完整性 | UNIQUE, PRIMARY KEY | 確保列唯一/主鍵 |
| 參照完整性 | FOREIGN KEY | 維護父子表關聯 |
四、 視圖與序列
-- 建立視圖
CREATE OR REPLACE VIEW v1(eid, name, salary) AS
SELECT empno, ename, sal FROM emp WHERE deptno = 30;
-- 建立序列(自動遞增主鍵常用)
CREATE SEQUENCE myseq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE;
INSERT INTO test VALUES (myseq.NEXTVAL, 'Tom');
五、 資料字典查詢
| 視圖前綴 | 可見範圍 | 常用範例 |
| USER_ | 當前使用者物件 | SELECT * FROM user_tables; |
| ALL_ | 當前使用者可存取物件 | SELECT * FROM all_tables; |
| DBA_ | 全資料庫物件(需 DBA 權限) | SELECT * FROM dba_tables; |
六、 表間資料複製與查詢結構
-- 跨表複製
INSERT INTO dept1(id, name) SELECT deptno, dname FROM dept;
-- 查詢表結構
DESC employee; -- SQL*Plus 環境
-- 或
SELECT column_name, data_type, data_length, nullable
FROM user_tab_columns
WHERE table_name = 'EMPLOYEE';
七、 實戰模板:帶序列自增主鍵的建表腳本
CREATE TABLE test2 (
id CHAR(10) PRIMARY KEY,
name CHAR(10)
);
CREATE SEQUENCE test2_seq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE;
-- 批次插入範例
BEGIN
FOR i IN 1..10 LOOP
INSERT INTO test2 VALUES (test2_seq.NEXTVAL, 'User'||i);
END LOOP;
COMMIT;
END;
掌握上述指令與類型特性,可覆蓋 90% 日常開發運維場景,建議收藏備查。
- 上一篇文章: Oracle 效能調校核心要點:存取路徑、高水位線、統計資訊與區塊大小策略
- 下一篇文章: Oracle 徹底移除與重裝指南:13 步驟清除殘留避免安裝失敗
Copyright ©
程式碼之家 All Rights Reserved