Jak říká Orbman, standardní způsob, jak to udělat, je pomocí sekvence. Většina lidí to také spojí s vložkou spouště. Když je tedy vložen řádek bez ID, spustí se spouštěč, aby za vás vyplnil ID ze sekvence.
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;
Toto je jeden z mála případů, kdy má smysl používat trigger v Oracle.