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

MySQL 遷移 Oracle 完整遷移指南:8 大核心差異與改寫對照表

     編輯:MySQL 資料庫相關知識

遷移前評估

MySQL → Oracle 屬異構遷移,語法、型別、函數、並發模型差異大,建議使用 Oracle SQL Developer Migration Workbench 或 AWS SCT 輔助評估轉換率。

八大核心差異對照表

1. 自增欄位 → Sequence + Trigger

-- MySQL
id INT AUTO_INCREMENT PRIMARY KEY

-- Oracle
CREATE SEQUENCE seq_tbl_id INCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCACHE NOCYCLE;
CREATE OR REPLACE TRIGGER trg_tbl_bir
BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
  SELECT seq_tbl_id.NEXTVAL INTO :NEW.id FROM DUAL;
END;

12c+ 可用 GENERATED AS IDENTITY 簡化。

2. 字串引號:雙引號 → 單引號 + 雙倍轉義

-- MySQL 允許雙引號
INSERT INTO t VALUES ("O'Reilly");

-- Oracle 僅單引號,單引號轉義為兩個單引號
INSERT INTO t VALUES ('O''Reilly');

3. 分頁查詢:LIMIT → ROWNUM 子查詢

-- MySQL
SELECT * FROM t LIMIT 20 OFFSET 80;

-- Oracle 寫法一 (標準)
SELECT * FROM (
  SELECT a.*, ROWNUM rn FROM (
    SELECT * FROM t ORDER BY id
  ) a WHERE ROWNUM <= 100
) WHERE rn > 80;

-- Oracle 寫法二 (12c+ OFFSET/FETCH)
SELECT * FROM t ORDER BY id OFFSET 80 ROWS FETCH NEXT 20 ROWS ONLY;

4. 長字串 (>4000 bytes) → CLOB + DBMS_LOB

-- Oracle VARCHAR2 上限 4000 bytes
-- 超過需用 CLOB
DECLARE
  l_clob CLOB;
BEGIN
  DBMS_LOB.CREATETEMPORARY(l_clob, TRUE);
  DBMS_LOB.WRITEAPPEND(l_clob, LENGTH(:long_text), :long_text);
  INSERT INTO t (col) VALUES (l_clob);
END;

5. 日期處理差異

操作MySQLOracle
目前時間NOW()SYSDATE / CURRENT_TIMESTAMP
字串轉日期STR_TO_DATE('2024-01-15','%Y-%m-%d')TO_DATE('2024-01-15','YYYY-MM-DD')
日期轉字串DATE_FORMAT(dt,'%Y-%m-%d')TO_CHAR(dt,'YYYY-MM-DD')
日期運算 (7天前)DATE_SUB(NOW(), INTERVAL 7 DAY)SYSDATE - 7
日期格式元素%Y %m %d %H %i %sYYYY MM DD HH24 MI SS

6. 空值語意:MySQL 空字串 ≠ NULL,Oracle 空字串 = NULL

-- MySQL
INSERT INTO t (col) VALUES ('');  -- 空字串
INSERT INTO t (col) VALUES (NULL); -- NULL

-- Oracle 兩者皆視為 NULL,NOT NULL 欄位拒絕空字串
-- 遷移時需將 '' 轉為 ' ' (單空格) 或保留 NULL

7. 模糊查詢:LIKE → INSTR (可用索引)

-- MySQL
WHERE col LIKE '%keyword%'

-- Oracle 建議
WHERE INSTR(col, 'keyword') > 0  -- 可使用 Function-Based Index
-- 或 Oracle Text (全文索引)

8. 資源釋放:ResultSet / Statement / Connection 必須顯式關閉

Oracle 遊標資源較重,連線池洩漏極易導致 ORA-01000 maximum open cursors exceeded。

遷移檢查清單

  1. Schema 轉換 (型別、約束、索引、Partition)。
  2. 資料遷移 (Data Pump / GoldenGate / CDC)。
  3. PL/SQL 改寫 (存儲程序、觸發器、Package)。
  4. 應用層 SQL 替換 (PreparedStatement 參數化)。
  5. 效能基準測試 (AWR/ASH 分析)。
  6. 上線回滾方案。

遷移是系統工程,非單純 SQL 翻譯;預留 30% 時間給測試與效能調校。

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