すべてのSQLが同じというわけではありません。 OracleもMySQLも、IDENTITYの実際のSQL標準をサポートしていません。
Oracleはバッククォートを使用しません...実際に識別子を引用する必要はありません。識別子に無効な文字を誤って使用してしまうことがないようにしない方がよいでしょう。
Oracleの数値はNUMBERと呼ばれ、オプションの精度とスケールを取ることができます。
CREATE TABLE Category
(
id NUMBER(11) NOT NULL,
title VARCHAR2(45) NULL,
PRIMARY KEY (id)
)
AUTO_INCREMENTを実行するには、シーケンスを作成します。
CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;
次に、テーブルに挿入するときに、次のようにします。
INSERT INTO category
VALUES (seq_category_id.nextval, 'some title');
AUTO_INCREMENTのようにこれを自動的に行うには、挿入前トリガーを使用します。
-- Automatically create the incremented ID for every row:
CREATE OR REPLACE trigger bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
BEGIN
SELECT seq_category_id.nextval INTO :new.id FROM dual;
END;
または:
-- Allow the user to pass in an ID to be used instead
CREATE OR REPLACE TRIGGER bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
DECLARE
v_max_cur_id NUMBER;
v_current_seq NUMBER;
BEGIN
IF :new.id IS NULL THEN
SELECT seq_category_id.nextval INTO :new.id FROM dual;
ELSE
SELECT greatest(nvl(max(id),0), :new.id) INTO v_max_cur_id FROM category;
SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
WHILE v_current_seq < v_max_cur_id
LOOP
SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
END LOOP;
END IF;
END;
さて、これらの違いを発見する限り、多くの場合、「oracleidentity」や「oracleauto_increment」などを検索して、Oracleがこれをどのように行うかを確認できます。