このようなものは11gで動作します
CREATE SEQUENCE t1_id_seq
start with 10000
increment by 1;
CREATE TRIGGER trigger_name
BEFORE INSERT ON t1
FOR EACH ROW
DECLARE
BEGIN
IF( :new.id IS NULL )
THEN
:new.id := t1_id_seq.nextval;
END IF;
END;
以前のバージョンを使用している場合は、シーケンスから次の値を取得するためにSELECTINTOを実行する必要があります
CREATE TRIGGER trigger_name
BEFORE INSERT ON t1
FOR EACH ROW
DECLARE
BEGIN
IF( :new.id IS NULL )
THEN
SELECT t1_id_seq.nextval
INTO :new.id
FROM dual;
END IF;
END;
Oracleシーケンスにはギャップがないわけではないことに注意してください。したがって、さまざまな理由で特定の値がスキップされる可能性があります。数分、数時間、または数日後に行われた場合、最初の挿入のIDは10000で、2番目の挿入のIDは10020である可能性があります。
さらに、Oracleは、MySQLのようにVALUES句で複数の行を指定することをサポートしていないことに注意してください。だからではなく
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
2つの別々のINSERTステートメントが必要です
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');