Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Trigger zum Erstellen einer automatischen Nummer

So etwas funktioniert auf 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;

Wenn Sie eine frühere Version verwenden, müssen Sie SELECT INTO ausführen, um den nächsten Wert aus der Sequenz zu erhalten

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;

Beachten Sie, dass Oracle-Sequenzen nicht lückenlos sind. Es ist also durchaus möglich, dass bestimmte Werte aus verschiedenen Gründen übersprungen werden. Ihre erste Einfügung hat möglicherweise die ID 10000 und die zweite möglicherweise die ID 10020, wenn sie Minuten, Stunden oder Tage später erfolgt.

Beachten Sie außerdem, dass Oracle die Angabe mehrerer Zeilen in der VALUES-Klausel nicht unterstützt, wie dies bei MySQL der Fall ist. Also eher als

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

Sie benötigen zwei separate INSERT-Anweisungen

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