Sådan noget vil virke 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;
Hvis du er på en tidligere version, skal du lave en SELECT INTO for at få den næste værdi fra 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;
Vær opmærksom på, at Oracle-sekvenser ikke er hulfrie. Så det er fuldt ud muligt, at bestemte værdier vil blive sprunget over af forskellige årsager. Dit første indlæg kan have et ID på 10000, og det andet kan have et ID på 10020, hvis det er udført minutter, timer eller dage senere.
Derudover skal du være opmærksom på, at Oracle ikke understøtter specificering af flere rækker i VALUES-sætningen, som MySQL gør. Så hellere end
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
du skal bruge to separate INSERT-sætninger
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');