我需要在另一个模式中重命名一堆序列。
将old_seq重命名为new_seq无效。
尝试:
ALTER SEQUENCE old_seq RENAME TO new_seq;
但它给了我错误
ORA-02286: no options specified for ALTER SEQUENCE
我不想提及我在创建序列时提到的所有选项,因为它们需要相同。只需要更改名称。
答案 0 :(得分:3)
如果您不是该序列的所有者,可以使用以下步骤: -
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>;
答案 1 :(得分:3)
来自@ankit的答案与修复此问题所需的内容完全一致,但它提出了一些我在这个答案中修正的问题和拼写错误。我希望它有用。
首先,您必须选择 old_seq 的当前值:
SELECT old_seq.CURRVAL FROM dual;
如果您收到 ORA-08002 错误,因为您需要先请求NEXTVAL才能初始化序列。只是做:
SELECT old_seq.NEXTVAL FROM dual;
然后再次询问CURRVAL。
现在您已拥有当前值,只需使用
删除旧序列即可DROP SEQUENCE old_seq;
并使用
创建具有所需名称的new_seqCREATE SEQUENCE new_seq START WITH <CURRVAL FROM old_seq>;
如果您使用INCREMENT
而不是START WITH
,则应考虑增量将应用于序列中每个值的请求。您必须创建序列,然后将增量重置为1.使用START WITH
可以避免此问题。
答案 2 :(得分:1)
您可以直接重命名:
rename old_sequence to new_sequence;
它会说表重命名但你可以忽略它。您的序列将被重命名。
试试吧。