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