Нещо подобно ще работи на 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;
Ако използвате по-ранна версия, ще трябва да направите SELECT INTO, за да получите следващата стойност от последователността
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, а второто може да има ID 10020, ако е направено след минути, часове или дни.
Освен това имайте предвид, че Oracle не поддържа указване на множество редове в клаузата VALUES, както прави MySQL. Така че вместо
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
ще ви трябват два отделни оператора INSERT
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');