Обеспечение того, что этот столбец соответствует последовательности в Oracle - PullRequest
3 голосов
/ 19 октября 2010

Можно ли каким-либо образом ограничить столбец (скажем, "ID"), чтобы он следовал за созданной последовательностью (скажем, "ID_SEQ")?

Без автоматического ограничения ручные вставки могут выкинуть всю последовательность из-whack.Что можно сделать, чтобы это исправить?Просто дважды позвоните в NextVal?

Ответы [ 2 ]

7 голосов
/ 19 октября 2010

Вы можете использовать триггер для достижения этой цели.Пример:

create or replace trigger product_insert before insert on product for each row begin
select id_seq.nextval
into :new.product_id
from dual;
end;
3 голосов
/ 19 октября 2010

Нет способа создать декларативное ограничение для такого рода вещей.Конечно, вы можете создать триггер уровня строки BEFORE INSERT, который будет автоматически заполнять ключ на основе последовательности (игнорируя любое значение, которое было предоставлено, если вы беспокоитесь о специальных вставках, которые не используют последовательность).

Если вы находитесь в ситуации, когда вам нужно увеличить последовательность, потому что кто-то ad hoc вставляет созданные строки с ключами, превышающими текущее значение последовательности, вашими двумя вариантами являются

  1. Создайте цикл, который вызывает nextval несколько раз
  2. ALTER последовательности, чтобы установить для INCREMENT BY любое нужное вам большое значение, один раз вызовите nextval и ALTER последовательности назад.Это требует, чтобы никто другой не использовал последовательность одновременно.Но это полезно, если вам нужно сделать что-то вроде сброса набора последовательностей после обновления данных из другой среды.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...