Как создать автоинкрементное поле, поле-счетчик в Oracle

Источник: oracle

Такие понятия как "автоинкрементное поле", "identity", в Oracle отсутствуют. Для генерации уникальных значений поля как правило используется объект базы данных SEQUENCE (последовательность).

CREATE sequence sq_test;

Для получения очередного уникального значения последовательность может быть использована напрямую, либо через триггер:

CREATE TABLE test (
    test_id NUMBER(38)
  , code VARCHAR2(16)
  , constraint pk_test primary key (test_id)
);
 
CREATE OR REPLACE TRIGGER tbiur_test
before INSERT OR UPDATE ON test
FOR each ROW
BEGIN
   IF :NEW.test_id IS NULL THEN
     SELECT sq_test.NEXTVAL INTO :NEW.test_id FROM dual;
   END IF;
END;
/

-- Использование последовательности напрямую.
INSERT INTO test (test_id, code) VALUES (sq_test.NEXTVAL, 'One');
-- Определение значения первичного ключа в триггере.
INSERT INTO test (code) VALUES ('Two');
INSERT INTO test (test_id, code) VALUES (NULL, 'Three');

Дополнительно: получение значения поля (любого, не только ключевого и/или сгенеренного из последовательности) после добавления одиночной записи (через INSERT INTO .. VALUES) через RETURN[ING]. (VAR - команда для SQL*Plus, деклалирующая переменную test_id)

var test_id number
INSERT INTO test (test_id, code) VALUES (sq_test.NEXTVAL, 'One') RETURN test_id INTO :test_id;
INSERT INTO test (code) VALUES ('Two') RETURN test_id INTO :test_id;

При использовании конструкции INSERT INTO .. SELECT опция RETURN[ING] недоступна.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=21696