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

MySQL 遷移 Oracle 完整注意事項清單:自增欄、引號、分頁、長文本、日期、空值、模糊查詢

     編輯:Oracle 資料庫相關知識

遷移核心差異對照表

項目MySQLOracle處理方式
自增主鍵AUTO_INCREMENTSEQUENCE + TRIGGER建立 SEQUENCE,INSERT 時用 seq.NEXTVAL,或 12c+ GENERATED AS IDENTITY
字串引號單引號/雙引號皆可僅單引號所有雙引號改單引號;單引號轉義:''
分頁查詢LIMIT offset, rowsROWNUM 子查詢標準寫法:
SELECT * FROM (SELECT a.*, ROWNUM rn FROM (SELECT * FROM t ORDER BY id) a WHERE ROWNUM <= :end) WHERE rn > :start
長文本TEXT/BLOBCLOB/BLOB超過 4000 字元必須用 CLOB,配合 DBMS_LOB 套件讀寫
日期類型DATE / TIME 分離DATE 含時分秒用 SYSDATE 取當前,TO_DATE/TO_CHAR 格式化,日期運算 SYSDATE - 7 代表 7 天前
空值約束NOT NULL 允許空字串NOT NULL 禁止 NULL匯入前將空字串轉為單空格 ' ' 或預設值
模糊查詢LIKE '%str%'LIKE '%str%' 不走索引改用 INSTR(col, 'str') > 0 可利用索引(需建立 Function-based Index)
資源釋放自動/較寬鬆嚴格程式中顯式關閉 ResultSet、Statement、Connection

關鍵轉換範例

自增序列建立

CREATE SEQUENCE seq_t_id INCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCYCLE NOCACHE;
INSERT INTO t(id, name) VALUES (seq_t_id.NEXTVAL, 'abc');

分頁查詢優化版

-- 方式一:雙層 ROWNUM
SELECT * FROM (
  SELECT a.*, ROWNUM rn FROM (
    SELECT * FROM table_name WHERE cond1 ORDER BY cond2
  ) a WHERE ROWNUM <= 100
) WHERE rn > 80;

-- 方式二:內聯視圖
SELECT * FROM (
  SELECT ROWNUM rn, c.* FROM (
    SELECT * FROM table_name WHERE cond1 ORDER BY cond2
  ) c
) WHERE rn > 80 AND rn <= 100;

日期運算對照

-- MySQL: WHERE dt > SUBDATE(NOW(), INTERVAL 7 DAY)
-- Oracle: WHERE dt > SYSDATE - 7

小結

MySQL → Oracle 遷移不僅是語法轉換,更涉及架構差異(序列 vs 自增、CLOB 處理、分頁模式)。建議建立遷移腳本自動化轉換,並針對核心業務進行完整回歸測試。

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