November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Tuesday, November 8th, 2005 06:11 pm
У sequence нельзя сбросить START WITH. Зато можно удалить sequence совсем и создать заново.
Но при удалении отваливаются триггеры, которые использовали этот sequence.
Поэтому после создания sequence надо не забыть перекомпилировать триггер.
Вот такая загогулина, панимаишь..
Tags:
Tuesday, November 8th, 2005 06:21 pm (UTC)
А еще после рестора базы или миграции Oracle продвигает все сиквенсы на некоторое значение. Это помогает в том случае, если объявились некоторые внешние объекты с номерами из оракловых сиквенсов, а онлайновые логи таки не удалось подтыкнуть.
Tuesday, November 8th, 2005 10:04 pm (UTC)
Я за него очень рад, но у меня как раз задача была обратная - стереть из базы всё содержимое и впихнуть туда руками одну запись, но с фиксированным идентификатором 1. А он вот все время триггером из сиквенса вынимается..
Wednesday, November 9th, 2005 06:07 am (UTC)
disable trigger - впихнуть запись- enable trigger ?
Wednesday, November 9th, 2005 09:58 am (UTC)
И шоб потом этот триггер продолжал увеличивать номера от впихнутой записи, а не от прошлой инкарнации базы..
Wednesday, November 9th, 2005 11:35 am (UTC)
так то оно так, но насколько я понял идею разработчиков, sequence используется для получения уникальных записей, а не последовательных. поэтому так и сделали -- не все ли равно какой PK будет 1 или 4378.
есть утилки, например pl/sql developer позволяет одним кликом мыши сделать recompile referencing objects.
вот обидно было когда (в 8.0 по крайней мере) при create or replace view убивались все instead of триггеры на эту view, и упоминания о такой фиче я в доках не нашел...
Wednesday, November 9th, 2005 10:53 am (UTC)
В таком случае триггер нужно писать так

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-е для автоинкрементируемых полей такое поведение было по-умолчанию.
Wednesday, November 9th, 2005 11:03 am (UTC)
Ага, спасибо за идею, учту.
Только это все равно не спасает от проблемы со сбросом счетчика в начальное состояние. Хотя оно, на самом деле, особо и не нужно..
Tuesday, November 8th, 2005 06:39 pm (UTC)
А ты думал, что в сказку попал? ;))
Tuesday, November 8th, 2005 07:47 pm (UTC)
"А шоб знал!" (с) ;)