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');
MySQL 支援雙引號,Oracle 僅支援單引號。寫入前需將單引號轉義為兩個單引號:' → ''。
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;
Oracle 需用 CLOB 搭配 DBMS_LOB 套件處理,寫入前務必做非空與長度檢核。
DATE/TIME 分離;Oracle 單一 DATE 含時分秒。NOW(),Oracle SYSDATE。DATE_SUB(NOW(), INTERVAL 7 DAY),Oracle SYSDATE - 7。TO_DATE/TO_CHAR 需指定格式模板。MySQL 允許 NOT NULL 欄位存空字串,Oracle 視為違反約束。匯入前需將 NULL/空字串轉為單一空格或預設值。
LIKE '%str%' 無法使用索引,Oracle 建議用 INSTR(col, 'str') > 0 獲得較佳執行計畫。
程式結束時務必關閉 ResultSet、Statement、Connection,避免游標洩漏導致 ORA-01000。