Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Gatilho Oracle para criar um autonumber


Algo assim funcionará em 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;

Se você estiver em uma versão anterior, precisará fazer um SELECT INTO para obter o próximo valor da sequência
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;

Esteja ciente de que as sequências do Oracle não são livres de lacunas. Portanto, é perfeitamente possível que determinados valores sejam ignorados por vários motivos. Sua primeira inserção pode ter um ID de 10000 e a segunda pode ter um ID de 10020 se for feita minutos, horas ou dias depois.

Além disso, esteja ciente de que o Oracle não suporta a especificação de várias linhas na cláusula VALUES como o MySQL. Então, em vez de
insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')

você precisaria de duas instruções INSERT separadas
insert into t1 (firstname, lastname) values ('Michael','Jordan');
insert into t1 (firstname, lastname) values ('Larry','Bird');