事務核心概念
事務確保資料一致性,由一組相關 DML 組成,**全部成功或全部失敗**(ACID)。執行 DML 時 Oracle 自動加鎖,防止結構變更。
事務控制語句
SAVEPOINT a1; -- 設定存檔點
ROLLBACK TO a1; -- 回滾至存檔點
ROLLBACK; -- 取消整個事務
COMMIT; -- 提交事務
只讀事務
適用於報表/統計場景,確保查詢看到特定時間點的一致性快照,不受其他會話提交影響。
SET TRANSACTION READ ONLY;
-- 執行查詢...
COMMIT; -- 結束只讀事務
例:機票代售點 18:00 統計銷售,設定只讀事務後,即使其他會話新增訂單,本統計仍見舊數據。
常用 SQL 函數速查表
字串函數
| 函數 | 說明 | 範例 |
LOWER/UPPER | 大小寫轉換 | UPPER('abc') → 'ABC' |
LENGTH | 字串長度 | LENGTH('中文') → 2 |
SUBSTR(str,m,n) | 子串(m 從 1 起) | SUBSTR('Oracle',1,3) → 'Ora' |
INSTR(str,sub,n,m) | 子串位置 | INSTR('Oracle','ra') → 3 |
REPLACE(str,old,new) | 替換 | REPLACE('JACK','J','B') → 'BACK' |
\|\| | 串接 | 'A'\|\|'B' → 'AB' |
數學函數
| 函數 | 說明 | 範例 |
ROUND(n,m) | 四捨五入,m 為負表小數點左側 | ROUND(220,-2) → 200 |
TRUNC(n,m) | 截斷不捨入 | TRUNC(3.1415,2) → 3.14 |
MOD(m,n) | 取餘 | MOD(10,3) → 1 |
FLOOR/CEIL | 向下/向上取整 | FLOOR(3.9)=3, CEIL(3.1)=4 |
日期函數
| 函數 | 說明 |
SYSDATE | 當前系統日期時間 |
ADD_MONTHS(d,n) | 加減月份 |
LAST_DAY(d) | 該月最後一天 |
MONTHS_BETWEEN | 兩日期月份差 |
轉換函數(TO_CHAR 格式元素)
| 元素 | 含義 |
YYYY-MM-DD HH24:MI:SS | 完整日期時間 |
9 | 數字,前導零不顯示 |
0 | 數字,前導零補齊 |
L | 本地貨幣符號 |
C | 國際貨幣符號 |
G/D | 群組/小數分隔符 |
TO_CHAR(SAL,'L99,999.99') → 'NT$1,234.56'
TO_CHAR(HIREDATE,'YYYY-MM-DD HH24:MI:SS')
系統上下文函數
SELECT SYS_CONTEXT('USERENV','DB_NAME') FROM DUAL; -- 資料庫名
SELECT SYS_CONTEXT('USERENV','SESSION_USER') FROM DUAL; -- 當前用戶
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL; -- 當前 Schema
SYS vs SYSTEM 差異
| 項目 | SYS | SYSTEM |
| 儲存內容 | 資料字典基表、動態視圖 | 次級內部資料、工具中繼資料 |
| 權限 | DBA、SYSDBA、SYSOPER | DBA、SYSDBA |
| 登入方式 | 必須 AS SYDBA/SYSOPER | 可 NORMAL 或 AS SYSDBA |
邏輯備份/恢復(EXP/IMP)
-- 導出整庫
EXP USERID=SYSTEM/PASS FULL=Y FILE=FULL.DMP
-- 導出單表
EXP USERID=SCOTT/TIGER TABLES=EMP FILE=EMP.DMP
-- 導入忽略已存在表
IMP USERID=SCOTT/TIGER TABLES=EMP FILE=EMP.DMP IGNORE=Y
數據字典與動態視圖
USER_*:當前用戶物件
ALL_*:可訪問物件
DBA_*:全資料庫物件(需 DBA 權限)
V$*:動態效能視圖,Instance 啟動時建立,關閉消失
表空間管理基礎
CREATE TABLESPACE DATA01
DATAFILE 'D:\SP001.DBF' SIZE 20M
UNIFORM SIZE 128K;
CREATE TABLE MY_TABLE (...) TABLESPACE DATA01;
表空間由一或多個資料檔組成,邏輯結構:表空間 → 段 → 區 → 塊。