Algo como esto funcionará en 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;
Si está en una versión anterior, deberá hacer SELECCIONAR EN para obtener el siguiente valor de la secuencia
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;
Tenga en cuenta que las secuencias de Oracle no están libres de espacios. Por lo tanto, es muy posible que se omitan valores particulares por una variedad de razones. Su primera inserción puede tener una identificación de 10000 y la segunda puede tener una identificación de 10020 si se realiza minutos, horas o días después.
Además, tenga en cuenta que Oracle no admite la especificación de varias filas en la cláusula VALUES como lo hace MySQL. Así que en lugar de
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
necesitaría dos declaraciones INSERT separadas
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');