2016-11-28 4 views
0

В Oracle, если я создать таблицу с полем ID и создать объект последовательности для этого поле автоматически увеличивается на 1, и начинается 1.Oracle Последовательность В сочетании с ручным вводом

IE: ID: 1, 2, 3, 4, 5, 6, и т.д. ...

то для первой записи таблицы, я вручную делать вставки, IE:

insert into table(ID, etc...) values (1, etc...) 

Будет ли объект последовательность автоматически перейти к следующий доступный идентификатор (2), если объект последовательности используется для следующей вставки?

+1

Простой ответ: нет. Последовательность никак не привязана к таблице. Это два отдельных объекта, которые предназначены для совместного использования. Если вам понадобится этот сбой, ваше приложение должно будет обработать нарушение первичного ключа и запросить новое значение. В противном случае просто используйте последовательность. –

+0

Используйте триггер для принудительного использования последовательности и игнорируйте значение, указанное в вставке. – DCookie

+0

Спасибо, ребята. Это было полезно. – FinalForm

ответ

0

Это требование часто встречается при переносе данных. Вы переносите данные без номера сгенерированного последовательности. После миграции вы используете последовательность для генерации номеров документов/строк. Чтобы избежать конфликта, используйте диапазон номеров для последовательности, то есть это дизъюнкция из вашего диапазона номеров миграции.

0

Вы можете создать триггер для автоматического увеличения значения вашей последовательности.

CREATE OR REPLACE TRIGGER <tgr_name> 
BEFORE INSERT ON <table> 
FOR EACH ROW 

BEGIN 
    SELECT seq_name.NEXTVAL 
    INTO :new.id 
    FROM dual; 
END; 
/