Come dice Orbman, il modo standard per farlo è con una sequenza. Quello che fa anche la maggior parte delle persone è accoppiarlo con un trigger di inserimento. Pertanto, quando viene inserita una riga senza un ID, il trigger si attiva per compilare l'ID per te dalla sequenza.
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;
Questo è uno dei pochi casi in cui ha senso utilizzare un trigger in Oracle.