Något liknande kommer att fungera på 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;
Om du använder en tidigare version måste du göra en SELECT INTO för att få nästa värde från sekvensen
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;
Var medveten om att Oracle-sekvenser inte är mellanrumsfria. Så det är fullt möjligt att vissa värden kommer att hoppas över av olika anledningar. Din första infogning kan ha ett ID på 10000 och den andra kan ha ett ID på 10020 om det görs minuter, timmar eller dagar senare.
Tänk dessutom på att Oracle inte stöder att specificera flera rader i VALUES-satsen som MySQL gör. Så hellre än
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
du skulle behöva två separata INSERT-satser
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');