Zoiets werkt op 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;
Als u een eerdere versie gebruikt, moet u een SELECT INTO uitvoeren om de volgende waarde uit de reeks te krijgen
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;
Houd er rekening mee dat Oracle-reeksen niet zonder gaten zijn. Het is dus heel goed mogelijk dat bepaalde waarden om verschillende redenen worden overgeslagen. Uw eerste inzet kan een ID van 10000 hebben en de tweede kan een ID van 10020 hebben als het minuten, uren of dagen later klaar is.
Houd er bovendien rekening mee dat Oracle geen ondersteuning biedt voor het specificeren van meerdere rijen in de VALUES-clausule zoals MySQL dat wel doet. Dus in plaats van
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
je hebt twee afzonderlijke INSERT-instructies nodig
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');