sql >> Database >  >> RDS >> Oracle

Oracle-trigger om een ​​automatische nummering te maken

Zoiets werkt op 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;

Als u een eerdere versie gebruikt, moet u een SELECT INTO uitvoeren om de volgende waarde uit de reeks te krijgen

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;

Houd er rekening mee dat Oracle-reeksen niet zonder gaten zijn. Het is dus heel goed mogelijk dat bepaalde waarden om verschillende redenen worden overgeslagen. Uw eerste inzet kan een ID van 10000 hebben en de tweede kan een ID van 10020 hebben als het minuten, uren of dagen later klaar is.

Houd er bovendien rekening mee dat Oracle geen ondersteuning biedt voor het specificeren van meerdere rijen in de VALUES-clausule zoals MySQL dat wel doet. Dus in plaats van

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

je hebt twee afzonderlijke INSERT-instructies nodig

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


  1. Hoe loop ik door een mysql-query met php

  2. Scheidingsgraden Query

  3. Hoe kan ik verbinding maken met MySQL op een WAMP-server?

  4. SendGrid voor PHP is traag. Zijn non-blocking verzoeken mogelijk?