Я хотел бы узнать, что такое consquent, если вы хотите создать последовательность после того, как таблица была создана, и уже добавлено немного данных.
(это потому, что метод PEAR DataObject insert() иногда пропускает инкрементные идентификаторы)
Итак, вот пример для достижения этого, но это правильный способ сделать, если после того, как прошло много времени?
Определение таблицы:
CREATE TABLE departments (
ID NUMBER(10) NOT NULL,
DESCRIPTION VARCHAR2(50) NOT NULL);
ALTER TABLE departments ADD (
CONSTRAINT dept_pk PRIMARY KEY (ID));
CREATE SEQUENCE dept_seq;
Определение триггера:
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
Если вы имеете в виду, что у вас уже есть данные с полем идентификатора, вставленным без использования триггера, единственное, что вам нужно будет проверить, это то, что "начало" вашей последовательности = по крайней мере максимальное существующее ID + 1
CREATE SEQUENCE dept_seq
START WITH 2503
INCREMENT BY 1
Тогда это должно быть прекрасно.
это связано с тем, что метод PEAR DataObject insert() иногда пропускает инкрементные идентификаторы
В дополнение к ответу Рафаэля Алтауса использование последовательности не гарантирует, что у вас нет "дыр" в идентификаторах. Подумайте о параллельном доступе или откатах.
Процитировать документацию:
Когда генерируется порядковый номер, последовательность увеличивается, независимо от транзакции, совершающей или откат. Если два пользователя одновременно увеличивают одну и ту же последовательность, то порядковые номера, которые каждый пользователь получает, могут иметь пробелы, так как порядковые номера генерируются другим пользователем.
Был интересный ответ на тот же вопрос об Асктоме:
Последовательности никогда не будут генерировать пробельную свободную последовательность чисел.
[...]
Вы никогда не должны рассчитывать на последовательность, генерирующую что-либо, даже близкое к свободной последовательности чисел. Это высокоскоростной, чрезвычайно масштабируемый многопользовательский способ генерации суррогатных ключей для таблицы.
[...] последовательные последовательности чисел практически невозможны с последовательностями (требуется только один откат - и это произойдет).