我需要在另一个模式中重命名一堆序列。
将 old_seq 重命名为 new_seq 不起作用。
试过:
ALTER SEQUENCE old_seq RENAME TO new_seq;
但它给了我错误
ORA-02286: no options specified for ALTER SEQUENCE
我不想提及我之前在创建序列时提到的所有选项,因为它们需要相同。只有名称需要更改。
如果您不是该序列的所有者,您可以使用以下步骤:-
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>;
@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
可以避免该问题。
您可以直接重命名它:
rename old_sequence to new_sequence;
它会说表重命名,但您可以忽略它。您的序列将被重命名。
试试看。