首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle DECODE 函數實戰:CASE/IF-THEN-ELSE 的高性能替代者

     編輯:Oracle 資料庫基礎

DECODE 是 Oracle 獨有的單行條件函數,語法緊湊、執行效率高、可直接用於 SELECT/WHERE/ORDER BY。本文對比 CASE、講解語法、實戰薪資調整案例、SQL*Plus 腳本管理命令,幫助您熟練掌握這把「瑞士軍刀」。

一、語法與語義

DECODE(expr, search1, result1,
              [search2, result2, ...],
              [default])
-- 等價於:
CASE expr
  WHEN search1 THEN result1
  WHEN search2 THEN result2
  ...
  ELSE default
END

優勢:無關鍵字干擾,解析樹更簡單,極大 SQL 中性能略優於 CASE。

二、實戰:職位差異化調薪

SELECT job, sal,
       DECODE(job,
         'ANALYST',  sal * 1.10,
         'CLERK',    sal * 1.15,
         'MANAGER',  sal * 1.20,
         sal) AS revised_salary
FROM scott.emp;

結果片段:

JOBSALREVISED_SALARY
CLERK800920
SALESMAN16001600
MANAGER29753570
ANALYST30003300
PRESIDENT50005000

三、SQL*Plus 腳本管理命令

善用腳本文件管理高頻查詢,構建個人 SQL 庫。

四、進階技巧

  • DECODE 可嵌套:DECODE(a,1,DECODE(b,1,'X','Y'),'Z')
  • 配合 SIGN 實現範圍判斷:DECODE(SIGN(val-100),1,'>100',0,'=100','<100')
  • 12c+ 推薦使用 CASE(ANSI 標準、可移植),但 DECODE 仍被廣泛支持且性能穩定。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
命令作用示例
SAVE保存緩衝區 SQL 到文件SAVE 'D:\selectEmp.txt' [CREATE/REPLACE/APPEND]
GET從文件載入緩衝區(不執行)GET 'D:\selectEmp.txt' → 再輸入 / 或 RUN
@ / START載入並自動執行@ D:\selectEmp.txt