• Oracle 修改序列的当前值的3种方式


    1.情景展示

    当我们将数据导入到表中后,为了避免后续数据插入失败,一般情况下,会更改此表使用的序列的开始值。

    如何修改?

    2.原因分析

    使用Navicat的话,是无法对序列的当前值,进行修改的。

    小编为大家整理了3种实现方式,一起来看下吧。

    3.解决方案

    方式一:使用plsql;

    打开plsql,找到sequences

    找到要修改的序列--》右键--》编辑--》更改:下一个数字的值即可。

    方式二:重建序列;

    错误方式:

    具体步骤是:删除原来的序列,重新创建。

    -- 删除序列
    DROP SEQUENCE SEQ_META_DATABASE;
    -- 重建序列
    CREATE SEQUENCE SEQ_META_DATABASE
    minvalue 1
    maxvalue 9999999999999999999
    INCREMENT BY 1
    START WITH 20;

    其中,start with 后面跟的就是起始值(下次调用此序列时,将会出现的值) 。

    方式三:使用sql。

    这一个,是本文的重点;

    我们由方式一可以知道:通过plsql的可视化操作界面,是可以修改的。

    那plsql到底是怎么实现的?一起来看下:

    选中序列--》右键--》编辑

    第一步:修改起始值;

    第二步:点击右下角的“查看SQL”。

    说明:

    起初,这里的起始值是300,我给它改成了30,实现的效果就是:

    将序列的下一个值改成了30,以后序列将会从30往后叠加。

    然后,看下面这张图,要实现序列起始值的修改,需要3步。

    第一步:更改序列的步长;

    alter sequence SEQ_META_THEME_TABLE increment by -271 nocache;

    我们需要明白一个前提:

    序列的值是怎么来的?

    当前值+步长(增量)

    所以,我们想要修改序列的当前值,就必须自改序列的增量。

    第二步:查询序列值;

    select SEQ_META_THEME_TABLE.nextval from dual;

    这一步的目的是:改变序列的当前值,让其按照自己预设的增量来完成序列当前值的修改工作。

    到这一步,该序列返回的当前值已经改成了300-271=29(下次调用将会返回30)。

    第三步:将序列的增量改成1。

    alter sequence SEQ_META_THEME_TABLE increment by 1 cache 20;

    -- Modify the last number 
    alter sequence SEQ_META_THEME_TABLE increment by -271 nocache;
    select SEQ_META_THEME_TABLE.nextval from dual;
    alter sequence SEQ_META_THEME_TABLE increment by 1 cache 20;

    不信?我们把SQL复制出来,执行一下。 

    把序列值变大(30-->300)

    关于增量的计算:

    如果更改后值(afterNum)>现在序列的下一个值(nextNum),增量(step)=afterNum - nextNum;

    如果更改后值(afterNum)<现在序列的下一个值(nextNum),增量(step)=afterNum - nextNum - 1;

    2022年6月16日15:56:13

    4.拓展

    plsql快速创建序列

    找到Sequences窗口;

    设置序列名称,通常以SEQ_开头;

    其它不用填,全部使用默认值即可;

    点击“应用”。

     

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    springboot整合log4j2
    document解析html
    关于字符串读写乱码的解决方法浅谈
    BOM知识整理
    es6的Map()构造函数
    es6的Set()构造函数
    关于node的path模块
    java总结(方法与对象)
    webpack3.0+总结
    java总结(二)(运算符)
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/15899733.html
Copyright © 2020-2023  润新知