2015-08-19 6 views
1

Мне нужно переименовать кучу последовательностей в другую схему.переименовать последовательность в другой схеме с той же самой currval

RENAME: old_seq to new_seq не работает.

Пробовал:

ALTER SEQUENCE old_seq RENAME TO new_seq; 

, но он дает мне ошибку

ORA-02286: no options specified for ALTER SEQUENCE 

Я не хочу упомянуть все варианты, которые я уже упоминал ранее, создавая последовательность, так как они должны быть одинаковыми , Необходимо изменить только имя.

+0

Какая БД вы используете ?? –

+0

Я использую 11g db – Anu

ответ

-1

Вы можете переименовать его прямо:

rename old_sequence to new_sequence; 

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

Попробуйте.

+0

no. Как уже упоминалось, владельцем последовательности является разница. Это не позволяет прямое переименование последовательности. – Anu

+0

Кроме того, вы теряете текущее значение ... – McK

2

Если вы не являетесь владельцем этой последовательности, Вы можете использовать следующие шаги: -

SELECT CURVAL FROM old_seq; 

Это даст вам значение Current_Sequence.

Теперь Отбросьте эту последовательность, используя

DROP SEQUENCE old_seq; 

и создать новую последовательность с таким же именем. Использование

CREATE SEQUENCE old_seq; 

А потом изменить, что с этим: -

ALTER SEQUENCE seq_example INCREMET BY <CURVAL FROM OLD VALUE>; 
0

Ответ от @ankit вполне соответствует то, что нужно, чтобы решить эту проблему, но она представляет несколько проблем и опечаток, которые я» m в этом ответе. Надеюсь, это будет полезно.

Во-первых, вы должны выбрать текущее значение old_seq:

SELECT old_seq.CURRVAL FROM dual; 

Если вы получаете ORA-08002 ошибку, потому что вы должны попросить NEXTVAL первым, чтобы инициализировать последовательность. Просто выполните:

SELECT old_seq.NEXTVAL FROM dual; 

, а затем снова запросить CURRVAL.

Теперь, когда у вас есть текущее значение, просто удалить старую последовательность, используя

DROP SEQUENCE old_seq; 

и создать new_seq с именем, которое вы хотите с помощью

CREATE SEQUENCE new_seq START WITH <CURRVAL FROM old_seq>; 

Если вы используете INCREMENT вместо START WITH, вы должны принять во внимание, что приращение будет применяться к каждому запросу для значения из последовательности.Вам нужно будет создать последовательность, а затем сбросить инкремент до 1. Использование START WITH позволяет избежать этой проблемы.