sql >> Base de Datos >  >> RDS >> Oracle

Desencadenador de Oracle para crear un número automático

Algo como esto funcionará en 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;

Si está en una versión anterior, deberá hacer SELECCIONAR EN para obtener el siguiente valor de la secuencia

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;

Tenga en cuenta que las secuencias de Oracle no están libres de espacios. Por lo tanto, es muy posible que se omitan valores particulares por una variedad de razones. Su primera inserción puede tener una identificación de 10000 y la segunda puede tener una identificación de 10020 si se realiza minutos, horas o días después.

Además, tenga en cuenta que Oracle no admite la especificación de varias filas en la cláusula VALUES como lo hace MySQL. Así que en lugar de

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

necesitaría dos declaraciones INSERT separadas

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