Как говорит Орбман, стандартный способ сделать это с помощью последовательности. То, что большинство людей также делают, соединяет это с триггером вставки. Поэтому, когда строка вставляется без идентификатора, запускается триггер, чтобы заполнить идентификатор для вас из последовательности.
CREATE SEQUENCE SEQ_ROLLINGSTOCK_ID START WITH 1 INCREMENT BY 1 NOCYCLE;
CREATE OR REPLACE TRIGGER BI_ROLLINGSTOCK
BEFORE INSERT ON ROLLINGSTOCK
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
WHEN (NEW.ID IS NULL)
BEGIN
select SEQ_ROLLINGSTOCK_ID.NEXTVAL
INTO :NEW.ID from dual;
END;
Это один из немногих случаев, когда имеет смысл использовать триггер в Oracle.