Как я могу решить ORA-04007

Я использую toad для oracle 11g, я пытался использовать alter a sequence с помощью пользовательского интерфейса (user interface).

Я хочу изменить currval.

Я блокирую эту ошибку:

ORA-04007: MINVALUE не может превышать текущее значение

1 ответ

Вы не изменяете значение currval псевдокоманды последовательности напрямую - его значение изменяется каждый раз, когда вы ссылаетесь на псевдокоманду nextval последовательности. Это похоже на то, что вы хотите опубликовать оператор alter sequence, чтобы изменить его параметр minvalue.

Если текущее значение последовательности меньше, чем minval, которое вы пытаетесь изменить, ошибка будет поднята. У вас есть как минимум два варианта:

  • Восстановить последовательность полностью с новым значением параметра minvalue
  • Измените значение incremet by, сгенерируйте следующее значение, измените параметр minval, а затем измените значение increment by.

Вот пример:

create sequence seq
increment by 1
minvalue 1
sequence SEQ created.
-- trying to change minvalue
alter sequence seq 
 minvalue 5
SQL Error: ORA-04007: MINVALUE cannot be made to exceed the current value
select seq.nextval
 from dual
NEXTVAL
------------
 1 
-- alter increment by
alter sequence seq
 increment by 4
select seq.nextval
 from dual
NEXTVAL
----------
 5 
-- altering minvalue
alter sequence seq 
 minvalue 5
sequence SEQ altered.
-- change increment by to 1 as it was before
alter sequence seq
 increment by 1
sequence SEQ altered.

licensed under cc by-sa 3.0 with attribution.