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

Oracle-udløser for at oprette et autonummer

Sådan noget vil virke på 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;

Hvis du er på en tidligere version, skal du lave en SELECT INTO for at få den næste værdi fra sekvensen

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;

Vær opmærksom på, at Oracle-sekvenser ikke er hulfrie. Så det er fuldt ud muligt, at bestemte værdier vil blive sprunget over af forskellige årsager. Dit første indlæg kan have et ID på 10000, og det andet kan have et ID på 10020, hvis det er udført minutter, timer eller dage senere.

Derudover skal du være opmærksom på, at Oracle ikke understøtter specificering af flere rækker i VALUES-sætningen, som MySQL gør. Så hellere end

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

du skal bruge to separate INSERT-sætninger

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


  1. Hvordan man betinget summerer to kolonner i PostgreSQL 9.3

  2. Brug af MySQL med Oracle Heterogene Services

  3. Skalering af midlertidige poster i databasen for at tælle totaler for at stoppe overabonnement

  4. Fjern SCHEMABINDING fra en visning i SQL Server