So etwas funktioniert auf 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;
Wenn Sie eine frühere Version verwenden, müssen Sie SELECT INTO ausführen, um den nächsten Wert aus der Sequenz zu erhalten
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;
Beachten Sie, dass Oracle-Sequenzen nicht lückenlos sind. Es ist also durchaus möglich, dass bestimmte Werte aus verschiedenen Gründen übersprungen werden. Ihre erste Einfügung hat möglicherweise die ID 10000 und die zweite möglicherweise die ID 10020, wenn sie Minuten, Stunden oder Tage später erfolgt.
Beachten Sie außerdem, dass Oracle die Angabe mehrerer Zeilen in der VALUES-Klausel nicht unterstützt, wie dies bei MySQL der Fall ist. Also eher als
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
Sie benötigen zwei separate INSERT-Anweisungen
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');