Oracle 9 - Сбрасывающий Последовательность для соответствия состоянию таблицы

кажется, ошибка в сафари / WebKit. возможно этот , или любой из этих . попытайтесь обновить свое сафари. если нет никакой более свежей стабильной версии, попробуйте 4 беты.

18
задан Jim Tough 25 January 2011 в 15:56
поделиться

3 ответа

Если ID - это имя вашего столбца PK, а PK_SEQ - имя вашей последовательности:

  1. Найдите значение самого высокого PK по SELECT MAX (ID) FROM tableName

  2. Найдите значение следующего PK_SEQ по ВЫБЕРИТЕ PK_SEQ.NEXTVAL FROM DUAL

  3. Если # 2> # 1, то ничего не нужно сделано, если вы относитесь к этим значения как истинные суррогатные ключи
  4. В противном случае измените последовательность на перейти к максимальному идентификатору с помощью ALTER SEQUENCE ПРИРОСТ PK_SEQ НА [значение №1 - №2 value]
  5. Поднять последовательность с помощью SELECT PK_SEQ.NEXTVAL FROM DUAL

  6. Сбросить значение приращения последовательности в 1 с помощью ALTER SEQUENCE PK_SEQ УВЕЛИЧЕНИЕ НА 1

Все это предполагает, что у вас нет новых вставок в таблицу, пока вы это делаете ...

16
ответ дан 30 November 2019 в 07:03
поделиться

Короче говоря, играйте:

-- Current sequence value is 1000

ALTER SEQUENCE x INCREMENT BY -999;
Sequence altered.

SELECT X.NEXTVAL FROM DUAL;
1

ALTER SEQUENCE x INCREMENT BY 1;
Sequence altered.

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

11
ответ дан 30 November 2019 в 07:03
поделиться

В некоторых случаях вам может быть проще просто получить текущее максимальное значение, а затем

drop sequence x;
create sequence x start with {current max + 1};

Приложение будет сломано после того, как вы выполните сброс. Но это помешает кому-либо вставлять строки в течение этого периода, а создание последовательности происходит быстро. Убедитесь, что вы воссоздали все гранты в последовательности, поскольку они будут отброшены, когда последовательность будет. И вы можете захотеть вручную перекомпилировать любой plsql, который зависит от последовательности.

1
ответ дан 30 November 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: