Comme le dit Orbman, la manière standard de le faire est avec une séquence. Ce que la plupart des gens font également, c'est de coupler cela avec un déclencheur d'insertion. Ainsi, lorsqu'une ligne est insérée sans ID, le déclencheur se déclenche pour remplir l'ID pour vous à partir de la séquence.
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;
C'est l'un des rares cas où il est logique d'utiliser un déclencheur dans Oracle.