dil: (Default)
dil ([personal profile] dil) wrote2005-11-08 06:11 pm
Entry tags:

Ещё немножко, и я с этим вашим ораклом совсем свихнусь

У sequence нельзя сбросить START WITH. Зато можно удалить sequence совсем и создать заново.
Но при удалении отваливаются триггеры, которые использовали этот sequence.
Поэтому после создания sequence надо не забыть перекомпилировать триггер.
Вот такая загогулина, панимаишь..

[identity profile] grid123.livejournal.com 2005-11-09 10:53 am (UTC)(link)
В таком случае триггер нужно писать так

BEGIN
IF :new.id IS NULL OR :new.id = 0 THEN
SELECT SEQUENCE_NAME.nextval INTO foo FROM dual;
:new.id := foo;
END IF;
END;

тогда сиквенс будет генерироваться только в том случае, когда значение первичного ключа
отсутствует либо равно 0.

В Infomix-е для автоинкрементируемых полей такое поведение было по-умолчанию.

[identity profile] dil.livejournal.com 2005-11-09 11:03 am (UTC)(link)
Ага, спасибо за идею, учту.
Только это все равно не спасает от проблемы со сбросом счетчика в начальное состояние. Хотя оно, на самом деле, особо и не нужно..