Sesuatu seperti ini akan bekerja pada 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;
Jika Anda menggunakan versi sebelumnya, Anda harus melakukan SELECT INTO untuk mendapatkan nilai berikutnya dari urutan
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;
Ketahuilah bahwa urutan Oracle tidak bebas celah. Jadi sangat mungkin bahwa nilai-nilai tertentu akan dilewati karena berbagai alasan. Sisipan pertama Anda mungkin memiliki ID 10000 dan yang kedua mungkin memiliki ID 10020 jika dilakukan beberapa menit, jam, atau hari kemudian.
Selain itu, ketahuilah bahwa Oracle tidak mendukung penetapan beberapa baris dalam klausa VALUES seperti yang dilakukan MySQL. Jadi daripada
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
Anda memerlukan dua pernyataan INSERT terpisah
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');