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

Oracle 與 SQL Server 語法差異對照與移植指南

     編輯:Oracle 資料庫基礎

核心語言引擎差異

  • Oracle:PL/SQL(第 3 代程序語言,支援複雜業務邏輯)。
  • SQL Server:T-SQL(擴展 ANSI SQL-92 的集合導向語言)。

兩者皆在 ANSI SQL-92 基礎上擴展,移植核心在於「非標準語法」的對應轉換。

高頻語法對照表

場景OracleSQL Server備註
無表單純運算SELECT 'x' FROM dualSELECT 'x'Oracle 必須有 FROM,DUAL 為單列單欄系統表
字串串接'A' || 'B''A' + 'B'
截取數字TRUNC(15.79, 1)ROUND(15.79, 1, 1) 或 FLOORSQL Server ROUND 第 3 參數 1 表截斷
數字轉字串TO_CHAR(123.45, '999999.99')STR(123.45, 10, 2) / FORMAT (2012+)TO_CHAR 格式模板極豐富
日期時間SYSDATEGETDATE()
日期加減月ADD_MONTHS(SYSDATE, 12)DATEADD(MONTH, 12, GETDATE())
日期差值(天)SYSDATE - ADD_MONTHS(SYSDATE,12)DATEDIFF(DAY, GETDATE(), DATEADD(MONTH,12,GETDATE()))Oracle 直接相減得數值
字串長度LENGTH(str)LEN(str)
空值判斷NVL(col, 0)ISNULL(col, 0) / COALESCECOALESCE 為 ANSI 標準,跨平台通用
條件表達式CASE WHEN ... THEN ... ELSE ... END同 ANSI 標準Oracle 另支援 DECODE
分頁查詢ROW_NUMBER() OVER (ORDER BY ...) (12c+ OFFSET ... FETCH)OFFSET ... ROWS FETCH NEXT ... ROWS ONLY (2012+)舊版 Oracle 用 ROWNUM 子查詢
合併結果集UNION / UNION ALL / MINUS / INTERSECTUNION / UNION ALL / EXCEPT / INTERSECTMINUS → EXCEPT
外部連接(+) 舊語法 / ANSI LEFT JOIN*= 舊語法 / ANSI LEFT JOIN統一用 ANSI JOIN 避免移植陷阱

NULL 語義差異實測

-- Oracle
SELECT 1 FROM dual WHERE NULL = NULL;        -- 無資料
SELECT 1 FROM dual WHERE NULL IS NULL;       -- 1
SELECT 1 FROM dual WHERE NVL(NULL,0)=NVL(NULL,0); -- 1

-- SQL Server
SELECT 1 WHERE NULL = NULL;                  -- 無資料 (ANSI 模式)
SELECT 1 WHERE NULL IS NULL;                 -- 1
SELECT 1 WHERE ISNULL(NULL,0)=ISNULL(NULL,0); -- 1

重點:任何與 NULL 的比較(=、<>、>、<)皆為 UNKNOWN,必須用 IS NULL / IS NOT NULL 或 NVL/ISNULL/COALESCE 處理。

移植實戰建議

  1. 統一改用 ANSI JOIN:棄用 (+)/*=,消除語法與語義差異。
  2. 日期運算封裝函數:建立跨平台通用的 ADD_MONTHS、MONTHS_BETWEEN 等包裝函數。
  3. 字串函數對應表:SUBSTR → SUBSTRING、INSTR → CHARINDEX、REPLACE 同名但參數順序不同。
  4. 自動編號:Oracle SEQUENCE / IDENTITY (12c+) ↔ SQL Server IDENTITY / SEQUENCE (2012+)。
  5. 錯誤處理:PL/SQL EXCEPTION WHEN ... ↔ T-SQL TRY...CATCH + RAISERROR/THROW。
  6. 測試驗證:建立對照測試資料集,逐條 SQL 對比執行計畫、結果集、效能指標。

工具輔助

  • SQL Developer / SSMS 內建移植精靈(僅供參考,人工審核不可省略)。
  • 開源專案 ora2pg、sqlines 可批次轉換 DDL/DML。

語法轉換只是移植的第一步;資料型別對應、鎖機制差異、優化器行為、權限模型、高可用架構才是專案成敗的關鍵。建議成立「異構資料庫移植規範」文件,持續沉澱專案經驗。

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