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