使用相同的currval重命名其他模式中的序列

时间:2015-08-19 09:20:07

标签: sql sequence rename alter nextval

我需要在另一个模式中重命名一堆序列。

将old_seq重命名为new_seq无效。

尝试:

ALTER SEQUENCE old_seq RENAME TO new_seq;

但它给了我错误

ORA-02286: no options specified for ALTER SEQUENCE 

我不想提及我在创建序列时提到的所有选项,因为它们需要相同。只需要更改名称。

3 个答案:

答案 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_seq
CREATE SEQUENCE new_seq START WITH <CURRVAL FROM old_seq>;

如果您使用INCREMENT而不是START WITH,则应考虑增量将应用于序列中每个值的请求。您必须创建序列,然后将增量重置为1.使用START WITH可以避免此问题。

答案 2 :(得分:1)

您可以直接重命名:

rename old_sequence to new_sequence;

它会说表重命名但你可以忽略它。您的序列将被重命名。

试试吧。

相关问题