Một cái gì đó như thế này sẽ hoạt động vào 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;
Nếu bạn đang sử dụng phiên bản cũ hơn, bạn sẽ cần thực hiện CHỌN VÀO để nhận giá trị tiếp theo từ chuỗi
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;
Lưu ý rằng các chuỗi Oracle không có khoảng trống. Vì vậy, hoàn toàn có thể là các giá trị cụ thể sẽ bị bỏ qua vì nhiều lý do. Lần chèn đầu tiên của bạn có thể có ID là 10000 và lần chèn thứ hai có thể có ID là 10020 nếu quá trình này được thực hiện sau vài phút, vài giờ hoặc vài ngày.
Ngoài ra, hãy lưu ý rằng Oracle không hỗ trợ chỉ định nhiều hàng trong mệnh đề VALUES như MySQL. Vì vậy, thay vì
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
bạn cần hai câu lệnh INSERT riêng biệt
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');