Něco takového bude fungovat na 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;
Pokud používáte starší verzi, budete muset provést SELECT INTO, abyste získali další hodnotu ze sekvence
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;
Uvědomte si, že sekvence Oracle nejsou bez mezer. Je tedy zcela možné, že konkrétní hodnoty budou z různých důvodů přeskočeny. Vaše první vložka může mít ID 10 000 a druhá může mít ID 10 020, pokud se to udělá o minuty, hodiny nebo dny později.
Navíc mějte na paměti, že Oracle nepodporuje specifikování více řádků v klauzuli VALUES jako MySQL. Tedy spíše než
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
budete potřebovat dva samostatné příkazy INSERT
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');