4

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

将 old_seq 重命名为 new_seq 不起作用。

试过:

ALTER SEQUENCE old_seq RENAME TO new_seq;

但它给了我错误

ORA-02286: no options specified for ALTER SEQUENCE 

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

4

3 回答 3

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>;
于 2015-08-19T12:52:33.993 回答
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可以避免该问题。

于 2016-06-21T17:39:16.297 回答
1

您可以直接重命名它:

rename old_sequence to new_sequence;

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

试试看。

于 2015-08-19T09:36:30.873 回答