Oracle
 sql >> Database >  >> RDS >> Oracle

Trigger Oracle per creare un numero automatico

Qualcosa del genere funzionerà su 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;

Se utilizzi una versione precedente, dovrai eseguire SELECT INTO per ottenere il valore successivo dalla sequenza

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;

Tieni presente che le sequenze Oracle non sono prive di interruzioni. Quindi è del tutto possibile che valori particolari vengano saltati per una serie di motivi. Il tuo primo inserto potrebbe avere un ID di 10000 e il secondo potrebbe avere un ID di 10020 se viene eseguito minuti, ore o giorni dopo.

Inoltre, tieni presente che Oracle non supporta la specifica di più righe nella clausola VALUES come fa MySQL. Quindi, piuttosto che

insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')

avresti bisogno di due istruzioni INSERT separate

insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');