sql >> Databáze >  >> RDS >> Oracle

Spouštěč Oracle pro vytvoření automatického číslování

Něco takového bude fungovat na 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;

Pokud používáte starší verzi, budete muset provést SELECT INTO, abyste získali další hodnotu ze sekvence

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;

Uvědomte si, že sekvence Oracle nejsou bez mezer. Je tedy zcela možné, že konkrétní hodnoty budou z různých důvodů přeskočeny. Vaše první vložka může mít ID 10 000 a druhá může mít ID 10 020, pokud se to udělá o minuty, hodiny nebo dny později.

Navíc mějte na paměti, že Oracle nepodporuje specifikování více řádků v klauzuli VALUES jako MySQL. Tedy spíše než

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

budete potřebovat dva samostatné příkazy INSERT

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


  1. Jak povolit trasování v aplikacích Oracle r12

  2. jak získat 3. report pro spojení údajů o zákazníkovi a objednávce

  3. SQL dotaz pro nalezení hodnoty ve více rozsazích

  4. Rozbalte sadu výsledků GROUP BY a HAVING