Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclencheur Oracle pour créer un numéro automatique

Quelque chose comme ça fonctionnera sur 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;

Si vous êtes sur une version antérieure, vous devrez faire un SELECT INTO pour obtenir la valeur suivante de la séquence

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;

Sachez que les séquences Oracle ne sont pas sans espace. Il est donc tout à fait possible que des valeurs particulières soient ignorées pour diverses raisons. Votre première insertion peut avoir un ID de 10000 et la seconde peut avoir un ID de 10020 si elle est effectuée quelques minutes, heures ou jours plus tard.

De plus, sachez qu'Oracle ne prend pas en charge la spécification de plusieurs lignes dans la clause VALUES comme le fait MySQL. Alors plutôt que

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

vous auriez besoin de deux instructions INSERT distinctes

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