![]()  | 
Как создать автоинкрементное поле, поле-счетчик в 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] недоступна.  |