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

Oracle 到 DB2 遷移指南:六大核心 SQL 語法對照與實作範例

     編輯:DB2 教學

前言

企業將應用從 Oracle 遷移至 DB2 時,SQL 方言差異是最大挑戰之一。本文針對六大高頻使用功能,提供 Oracle 與 DB2 (以 Oracle 8i / DB2 7.x 為基準) 的語法對照表與實作範例,加速遷移驗證流程。

1. 取得前 N 筆記錄 (Top-N Query)

平台語法範例
Oracle
SELECT * FROM user.bsempms WHERE rownum <= n;
DB2
SELECT * FROM db2admin.bsempms FETCH FIRST n ROWS ONLY;
DB2 替代寫法
SELECT * FROM (
  SELECT *, ROW_NUMBER() OVER() AS rn FROM db2admin.bsempms
) WHERE rn <= n;

重點: DB2 使用 ANSI SQL 標準 FETCH FIRST n ROWS ONLY,語意清晰;複雜排序分頁建議搭配 ROW_NUMBER() OVER(ORDER BY ...)。

2. 取得目前日期時間

平台語法範例
Oracle
SELECT sysdate FROM dual;
DB2
SELECT CURRENT TIMESTAMP FROM sysibm.sysdummy1;

補充: DB2 另提供 CURRENT DATE、CURRENT TIME 獨立取得日期/時間;sysibm.sysdummy1 為內建單列虛擬表,對應 Oracle dual。

3. 字串串接 (Concatenation)

平台語法範例
Oracle
SELECT emp_no || emp_nam FROM bsempms;
SELECT CONCAT(emp_no, emp_nam) FROM bsempms;
DB2
SELECT emp_no || emp_nam FROM db2admin.bsempms;
SELECT emp_no CONCAT emp_nam FROM db2admin.bsempms;

重點: 兩平台皆支援 || 運算子與 CONCAT 函數,語法相容度極高。

4. 查詢表格結構 (Describe Table)

平台語法範例
Oracle
DESCRIBE table_name;
-- 或
SELECT * FROM user_tab_columns WHERE table_name = 'TABLE_NAME';
DB2
DESCRIBE TABLE schema.table_name;
-- 或查詢目錄視圖
SELECT * FROM syscat.columns WHERE tabname = 'TABLE_NAME' AND tabschema = 'SCHEMA';

注意: 原文範例誤植(Oracle/DB2 皆顯示日期查詢),此處補正為正確的結構查詢語法。

5. 內部聯結 (INNER JOIN)

平台語法範例
Oracle (舊語法)
SELECT a.* FROM bsempms a, bsdptms b WHERE a.dpt_no = b.dpt_no;
DB2 / Oracle (ANSI-92)
SELECT * FROM db2admin.bsempms a
INNER JOIN db2admin.bsdptms b ON a.dpt_no = b.dpt_no;

建議: 統一採用 ANSI-92 INNER JOIN ... ON 語法,可移植性最高、可讀性最佳。

6. 外部聯結 (OUTER JOIN)

類型Oracle (舊語法)DB2 / ANSI-92 標準語法
右外聯結WHERE a.dpt_no = b.dpt_no(+)RIGHT OUTER JOIN ... ON a.dpt_no = b.dpt_no
左外聯結WHERE a.dpt_no(+) = b.dpt_noLEFT OUTER JOIN ... ON a.dpt_no = b.dpt_no
全外聯結不支援 (需 UNION)FULL OUTER JOIN ... ON a.dpt_no = b.dpt_no

關鍵差異: Oracle 舊式 (+) 標記有諸多限制(不可與 OR 併用、不可多表外聯),DB2 全面支援 ANSI-92 標準語法,功能更完整。

遷移實務建議

  1. 自動化轉換工具: 使用 IBM Migration Toolkit (MTK) 或第三方工具進行首輪轉換。
  2. 語義驗證: 重點驗證 ROWNUM、SYSDATE、外聯結、階層查詢 (CONNECT BY) 等 Oracle 專有語法。
  3. 效能基準測試: 遷移後必須執行 SQL 效能基準測試,DB2 優化器特性不同,可能需調整索引或重寫查詢。
  4. 函數對照表: 建立專案專屬的函數對照表 (如 NVL → COALESCE, DECODE → CASE, SYSDATE → CURRENT TIMESTAMP)。

結語

掌握核心語法差異是遷移成功的關鍵。建議團隊建立「SQL 遷移規範文件」,持續累積專案經驗,將遷移風險降至最低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved