首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 遷移 Oracle 完整指南:8 大關鍵差異與對應處理

     編輯:MySQL 資料庫相關知識

1. 自動遞增欄位

MySQL:AUTO_INCREMENT;Oracle:需建立 SEQUENCE 並用 .NEXTVAL 取值。

CREATE SEQUENCE seq_teacher_id INCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCACHE;
INSERT INTO teachers (id, name) VALUES (seq_teacher_id.NEXTVAL, 'John');

2. 字串引號處理

MySQL 支援雙引號,Oracle 僅支援單引號。寫入前需將單引號轉義為兩個單引號:' → ''。

3. 分頁查詢

MySQL:LIMIT offset, count;Oracle 需用 ROWNUM 子查詢:

-- 寫法一
SELECT * FROM (
  SELECT a.*, ROWNUM rn FROM (
    SELECT * FROM table_name WHERE condition ORDER BY sort_col
  ) a WHERE ROWNUM <= 100
) WHERE rn > 80;

-- 寫法二(較常用)
SELECT * FROM (
  SELECT ROWNUM rn, t.* FROM (
    SELECT * FROM table_name WHERE condition ORDER BY sort_col
  ) t
) WHERE rn BETWEEN 81 AND 100;

4. 長字串(>4000 字元)

Oracle 需用 CLOB 搭配 DBMS_LOB 套件處理,寫入前務必做非空與長度檢核。

5. 日期欄位與運算

  • MySQL:DATE/TIME 分離;Oracle 單一 DATE 含時分秒。
  • 目前時間:MySQL NOW(),Oracle SYSDATE。
  • 日期運算:MySQL DATE_SUB(NOW(), INTERVAL 7 DAY),Oracle SYSDATE - 7。
  • 格式轉換:TO_DATE/TO_CHAR 需指定格式模板。

6. 空值與 NOT NULL

MySQL 允許 NOT NULL 欄位存空字串,Oracle 視為違反約束。匯入前需將 NULL/空字串轉為單一空格或預設值。

7. 模糊比較效能

LIKE '%str%' 無法使用索引,Oracle 建議用 INSTR(col, 'str') > 0 獲得較佳執行計畫。

8. 資源釋放

程式結束時務必關閉 ResultSet、Statement、Connection,避免游標洩漏導致 ORA-01000。

遷移檢查清單

  1. 建立對應 Sequence 並修改 INSERT 語句。
  2. 全域搜尋替換雙引號→單引號、單引號轉義。
  3. 重寫所有分頁查詢。
  4. 檢視長文字欄位型別是否需改為 CLOB。
  5. 統一日期函數與運算邏輯。
  6. 清洗空值資料。
  7. 優化模糊查詢語法。
  8. 補強資源關閉程式碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved