精华内容
下载资源
问答
  • oracle修改序列

    2019-10-02 11:12:49
    但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方...
     

    Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多。

    但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方式:

    1.先删除序列,然后重新创建。不过这不是当前要讲的重点。这个方法比较暴力,也比较方便,如果序列有在用,会影响应用的正常使用。

    2.写个循环来增加。如果需要增加500,写个循环运行500次SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL;

    3.通过Increment By来实现修改初始值。

    例如:若序列名称是SEQ_TEST,初始值是13,而现在要设置初始值为1013,Increment By值为:1000(1013-13)

    1) 执行:ALTER SEQUENCE SEQ_TEST INCREMENT BY 1000;

    2) 执行:SELECT SEQ_TEST.NEXTVAL FROM DUAL;

    3) 执行:ALTER SEQUENCE SEQ_TEST INCREMENT BY 1;

    修改完成。
    下面是一个操作样例截图:
     
     

    转载于:https://www.cnblogs.com/dreamOfChen/p/4980989.html

    展开全文
  • Oracle——修改序列

    2020-07-09 16:11:03
    Oracle中修改序列的两种方法: 1.直接删除序列,然后重新创建并且设置序列的初始值为希望的数据 drop sequence "SEQ_StockFlow_ID"; create sequence "SEQ_StockFlow_ID" increment by 1 start with 1000 --你想要...

    Oracle中修改序列的两种方法:

    1.直接删除序列,然后重新创建并且设置序列的初始值为希望的数据

    drop sequence "SEQ_StockFlow_ID";
    create sequence "SEQ_StockFlow_ID"
    increment by 1
    start with 1000  --你想要的值
    MAXvalue 9999999999999999;

    2、修改序列的每次增加的值,然后再修改回每次自增1

    -- 修改序列
    alter sequence "SEQ_StockFlow_ID" increment by 13500;   
    -- 查看序列
    select "SEQ_StockFlow_ID".nextval from dual;
    -- 修改序列
    alter sequence "SEQ_StockFlow_ID" increment by 1;

     

    展开全文
  • 场景描述: 在使用kettle、plsql等工具导数据到... 因为修改序列的语句中无法将变化值使用sql语句或者是加减,所以只能手动的去算差值然后在设置,很麻烦,类似于下面的sql就会报错,好像是这样直接运行,最后...

    场景描述:

           在使用kettle、plsql等工具导数据到数据库后,因为导入的数据有id,而我的表的id使用的是序列,所以需要将序列当前值设置为id的最大值,下一次项目调用的时候自动使用序列的下一个值,避免重复报错。

           因为修改序列的语句中无法将变化值使用sql语句或者是加减,所以只能手动的去算差值然后在设置,很麻烦,类似于下面的sql就会报错,好像是这样直接运行,最后的参数只能是纯数字。但是存储过程可以。

    注:网上找了很久,修改序列,只能通过设置变化值(可正可负),然后取序列的下一个值,然后设置回原来的自增1。无法直接设置为具体的某个值。

    错误写法:
    alter sequence SEQ_ACC_DIC_FEE_CLASSIFY increment BY (select max(id) from ACC_DIC_FEE_CLASSIFY);

    解决办法:

          想到能否像java那样写一个方法,直接调用,那我就省很多事了,调用一下就得到我想要的效果,然后去查了方法和存储过程(以前接触过存储过程,没有深入研究,只是简单用了一下,作为开发人员,居然没仔细研究,愧疚中)

    定义:
    所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过
    编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数
    来调用并执行它,从而完成一个或一系列的数据库操作。

           存储过程几种使用方法以及如何调用参考地址:https://www.cnblogs.com/Zeros/p/8081080.html

           Plsql创建存储过程以及如何测试参考地址:https://blog.csdn.net/news_out/article/details/82999261

           存储过程中alter语句的使用需要主要的问题参考地址:https://bbs.csdn.net/topics/70021296

           我的存储过程代码(无论是当前id大于最大值还是小于最大值,都会设置为当前已有数据的最大id):

    create or replace procedure update_seq(v_table_name in varchar2,v_seq_name in varchar2) is
      --id最大值
      v_max int;
      --序列当前值
      v_seq_val int;
      --查询id最大值的sql字符串
      selectIdMaxStr VARCHAR2 (500) := 'select max(id) from ' || v_table_name;
      --查询seq下一个值的sql字符串
      selectSeqValStr VARCHAR2 (500) :='select ' || v_seq_name || '.NEXTVAL from dual' ;
    begin
      EXECUTE IMMEDIATE selectIdMaxStr into v_max;
      --未修改前的序列下一个值
      EXECUTE IMMEDIATE selectSeqValStr into v_seq_val;
      EXECUTE IMMEDIATE 'alter sequence '|| v_seq_name ||' increment BY '|| (v_max - v_seq_val);
      --修改后的的序列取下一个值
      EXECUTE IMMEDIATE selectSeqValStr into v_seq_val;
      --修改为原来的1
      EXECUTE IMMEDIATE 'alter sequence '|| v_seq_name ||' increment BY 1';
      DBMS_OUTPUT.put_line(v_table_name||' 的序列 '||v_seq_name||' 已设置为 '|| v_seq_val);
    end update_seq;
    

           我的调用:

    begin
      -- Call the procedure
      update_seq('DIC_STANDARD_FEE','SEQ_DIC_STANDARD_FEE');
    end;
    

    展开全文
  • Oracle 修改序列问题在做项目的时候,会遇到Oracle数据库的迁移,那么序列可能会被重置,导致序列的当前值小于使用该序列的表中字段 最大值的时候 ,出现一下错误,[DH-OFFICE] 2012-10-30 19:48:32 WARN ...

    Oracle 修改序列问题

    在做项目的时候,会遇到Oracle数据库的迁移,那么序列可能会被重置,导致序列的当前值小于使用该序列的表中字段 最大值的时候 ,出现一下错误,

    [DH-OFFICE] 2012-10-30 19:48:32 WARN [http-8080-5] JDBCExceptionReporter.logExceptions(100) | SQL Error: 1, SQLState: 23000

    [DH-OFFICE] 2012-10-30 19:48:32 ERROR [http-8080-5] JDBCExceptionReporter.logExceptions(101) | ORA-00001: 违反唯一约束条件 (DHOFFICE.PK_APP_USER)

    修改序列值:

    查询下最大值

    select max(userid) from userinfo

    在原有的最大值基础上添加100

    alter sequence s_app_user increment by 100;

    搞定!

    展开全文
  • Oracle修改序列值(多SQL修改)

    千次阅读 2018-11-14 15:32:56
    Oracle并没有直接修改序列值为某个值 的SQL。 但是通过多条SQL便可修改。 1,背景,如果将序列值修改1为1000 //查询序列信息(包括序列名sequence_name),获取想到修改的sequence_name  SELECT * FROM User_...
  • oracle修改序列当前值

    千次阅读 2018-09-20 15:50:55
    业务上某个id采用触发器配合序列生成主键,由于在测试环境中,经常添加,导致序列当前值超过了最大值,那么oracle有没有方法修改序列的当前值呢?有的 首先我们可以查看当前序列值是多少,如下: select 序列名....
  • oracle修改序列开始值

    2019-09-25 18:39:33
    oracle修改序列开始值 select SEQ_ACT_DAY_SUM.nextval from dual; --10865 alter sequence SEQ_ACT_DAY_SUM increment by 100 alter sequence SEQ_ACT_DAY_SUM increment by 1;
  • 但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。没有这样的语法情况怎么办,有二种方法可以完成——1....
  • 创建序列(从1开始,递增幅度1,最大值无上限):create sequence fl_user_seq increment by 1 minvalue 1 no ...序列修改后值):select setval('fl_user_seq ', 88);Navicat Premium中序列位置如下图:补充:Pos...
  • 修改序列值 步骤: 修改这个序列的increment,然后做一次select,然后再把increment 修改回来。 ①—>②—>① ①select "layer_id_seq".nextval from dual #查询序列下一个值 ②alter sequence "layer_id_seq...
  • oracle修改序列的当前值

    万次阅读 2017-03-21 16:08:18
    oracle序列不支持直接修改当前值,我们可以采用如下方式修改序列的值: 修改这个序列的increment,然后做一次select,然后再把increment 修改回来: SQL> select seq.nextval from dual; NEXTVAL ...
  • 总是忘记对序列的操作,特将此记录下来。1、直接drop sequence seq_test;然后重新创建并且设置序列的初始值为希望的数据SQL:drop sequence seq_test;...2、修改序列的每次增加的值,然后再修改回每次自增1比如将...
  • 但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。 1.先删除序列,然后重新创建。不过这不是当前要讲...
  • 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方式:1.先删除序列,...
  • 但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。没有这样的语法情况怎么办,有二种方法可以完成——1....
  • Oracle修改序列

    2010-06-23 08:58:39
    SQL> Alter sequence camerainfo_id_seq increment by 1000;说明:修改序列的初始值; 转载于:https://blog.51cto.com/lifanfly/337672
  • Oracle修改序列当前值的两种方式

    万次阅读 2018-07-23 19:55:04
    总是忘记对序列的操作,特将此记录下来。 1、直接drop sequence seq_t_test;然后重新创建并且设置序列的初始值为希望的数据 SQL: drop sequence seq_t_test; create sequence seq_t_test;...2、修改序列的每次增加...
  • 事件背景:  为客户部署oracle数据库后需要将老库中的数据导过来,老库的单表数据2W+由于在为新库的表创建主键自增序列时设置的起始值是3000,导致... 修改序列起始值:  方法1: 直接删除当前的序列,重新创建...
  • 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方式:1.先删除序列,...
  • 修改序列当前值

    千次阅读 2020-07-04 01:19:02
    可通过存储过程进行序列当前值的修改。 create OR REPLACE procedure SETVAL ( sch IN VARCHAR2, --模式名 tab IN VARCHAR2, --序列名 num IN NUMBER) --修改为什么值 AS var1 NUMBER; --当前序列的下一个值 var2 ...
  • 但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。没有这样的语法情况怎么办,有二种方法可以完成1.先...
  • 创建序列及修改序列

    2017-12-11 15:48:19
    1、创建序列最小值1,最大值2147483647, 并 修改 从 500开始++CREATE SEQUENCE "LXGZZS"."SEQ_COMMON" AS INTEGER MINVALUE 1 MAXVALUE 2147483647 START WITH 1 INCREMENT BY 1 CACHE 20 NO CYCLE NO ORDER; ...
  • 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方式:1.先删除序列,...
  • oracle 修改序列起始值

    2012-06-28 14:51:00
    但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。没有这样的语法情况怎么办,有二种方法可以完成——...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,844
精华内容 13,137
关键字:

修改序列