-- MySQL
CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20));
-- Oracle
CREATE SEQUENCE seq_t_id INCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCACHE;
CREATE TABLE t (id NUMBER(6) PRIMARY KEY, name VARCHAR2(20));
-- 插入時
INSERT INTO t (id, name) VALUES (seq_t_id.NEXTVAL, 'abc');
-- 或建立觸發器自動填入
CREATE TRIGGER trg_t_bir BEFORE INSERT ON t FOR EACH ROW
BEGIN SELECT seq_t_id.NEXTVAL INTO :NEW.id FROM dual; END;
"abc"、'abc' 皆可(ANSI_QUOTES 模式下雙引號為識別符)。' → ''(單引號轉義)。
-- MySQL
SELECT * FROM t ORDER BY id LIMIT 20, 10; -- 第 21-30 筆
-- Oracle 寫法一(子查詢 + ROWNUM)
SELECT * FROM (
SELECT a.*, ROWNUM rn FROM (
SELECT * FROM t ORDER BY id
) a WHERE ROWNUM <= 30
) WHERE rn > 20;
-- Oracle 寫法二(內聯視圖)
SELECT * FROM (
SELECT ROWNUM rn, b.* FROM (
SELECT * FROM t ORDER BY id
) b WHERE ROWNUM <= 30
) WHERE rn > 20;
Oracle 12c+ 支援 OFFSET ... ROWS FETCH NEXT ... ROWS ONLY 標準語法。
TEXT 最大 64KB,LONGTEXT 4GB。VARCHAR2 最大 4000 位元組,超過需用 CLOB。DBMS_LOB 套件:DBMS_LOB.WRITEAPPEND(lob_loc, amount, buffer);| 功能 | MySQL | Oracle |
|---|---|---|
| 當前時間 | NOW() | SYSDATE(精確到秒) |
| 字串轉日期 | STR_TO_DATE('2021-01-01','%Y-%m-%d') | TO_DATE('2021-01-01','YYYY-MM-DD') |
| 日期轉字串 | DATE_FORMAT(dt,'%Y-%m-%d') | TO_CHAR(dt,'YYYY-MM-DD') |
| 日期運算(7 天前) | dt > DATE_SUB(NOW(), INTERVAL 7 DAY) | dt > SYSDATE - 7 |