Создание триггера долго после создания таблицы

0

Я хотел бы узнать, что такое 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;
Теги:
pear

2 ответа

3
Лучший ответ

Если вы имеете в виду, что у вас уже есть данные с полем идентификатора, вставленным без использования триггера, единственное, что вам нужно будет проверить, это то, что "начало" вашей последовательности = по крайней мере максимальное существующее ID + 1

CREATE SEQUENCE dept_seq
 START WITH     2503
 INCREMENT BY   1

Тогда это должно быть прекрасно.

1

это связано с тем, что метод PEAR DataObject insert() иногда пропускает инкрементные идентификаторы

В дополнение к ответу Рафаэля Алтауса использование последовательности не гарантирует, что у вас нет "дыр" в идентификаторах. Подумайте о параллельном доступе или откатах.

Процитировать документацию:

Когда генерируется порядковый номер, последовательность увеличивается, независимо от транзакции, совершающей или откат. Если два пользователя одновременно увеличивают одну и ту же последовательность, то порядковые номера, которые каждый пользователь получает, могут иметь пробелы, так как порядковые номера генерируются другим пользователем.

Был интересный ответ на тот же вопрос об Асктоме:

Последовательности никогда не будут генерировать пробельную свободную последовательность чисел.

[...]

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

[...] последовательные последовательности чисел практически невозможны с последовательностями (требуется только один откат - и это произойдет).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню