Oracle
 sql >> база данни >  >> RDS >> Oracle

Задействане на Oracle за създаване на автоматично номериране

Нещо подобно ще работи на 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;

Ако използвате по-ранна версия, ще трябва да направите SELECT INTO, за да получите следващата стойност от последователността

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;

Имайте предвид, че последователностите на Oracle не са без пропуски. Така че е напълно възможно определени стойности да бъдат пропуснати по различни причини. Вашето първо вмъкване може да има ID 10000, а второто може да има ID 10020, ако е направено след минути, часове или дни.

Освен това имайте предвид, че Oracle не поддържа указване на множество редове в клаузата VALUES, както прави MySQL. Така че вместо

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

ще ви трябват два отделни оператора INSERT

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да идентифицирам делничните дни в Oracle?

  2. Мога ли да използвам многопоточност с DBI на Perl и Oracle?

  3. Разбивка на Oracle Cloud – Разходи за хостинг на база данни на OCI

  4. Използване на оператор „LIKE“ с подзаявка, която връща множество резултати

  5. Как да заменя конкретни стойности в колона на база данни на Oracle?