【问题标题】:rename sequence in other schema with same currval重命名具有相同currval的其他模式中的序列
【发布时间】:2015-08-19 09:20:07
【问题描述】:

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

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

试过了:

ALTER SEQUENCE old_seq RENAME TO new_seq;

但它给了我错误

ORA-02286: no options specified for ALTER SEQUENCE 

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

【问题讨论】:

  • 你使用的是哪个数据库??

标签: sql sequence rename alter nextval


【解决方案1】:

如果您不是该序列的所有者,您可以使用以下步骤:-

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>;

【讨论】:

    【解决方案2】:

    @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 可以避免该问题。

    【讨论】:

    • 不幸的是,'START WITH' 需要一个常量,因此您的解决方案只能手动完成,不能通过脚本完成。
    【解决方案3】:

    你可以直接重命名:

    rename old_sequence to new_sequence;
    

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

    试试看。

    【讨论】:

    • 没有。如前所述,序列的所有者是不同的。它不允许直接重命名序列。
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2011-03-27
    • 2017-02-12
    相关资源
    最近更新 更多