oracle设置seq下一个值,oracle如何设置序列当前值

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;

修改这个序列的increment,然后做一次select,然后再把increment 修改回来:

SQL> select seq.nextval from dual;

NEXTVAL

----------

21

SQL> alter sequence seq increment by 79;

序列已更改。

SQL> select seq.nextval from dual;

NEXTVAL

----------

100

SQL> alter sequence seq increment by 1;

序列已更改。

SQL> select seq.nextval from dual;

NEXTVAL

----------

101

SQL>

做个循环select:

用隐式游标来实现做个循环select 这种方法的,其中select seq_article.nextval into indexnum from dual中的变量indexnum 是多余的:

DECLARE

indexnum number;

begin

for ind in 1..(52243-51538) loop

select seq_article.nextval into indexnum from dual;/*这是隐式游标,可以用显示游标来执行同一个select语句的多次执行*/

end loop ;

end;

或是

我们可以用显示游标来实现做个循环select 这种方法:

DECLARE

l_cursor INTEGER;

l_retval INTEGER;

BEGIN

l_cursor := dbms_sql.open_cursor;  //打开游标

dbms_sql.parse(l_cursor,'select seq_article.nextval from dual;’,1); //解析游标,此时,游标与某一SQL语句相关联了

for ind in 1..(52243-51538) loop

l_retval := dbms_sql.execute(l_cursor); //执行游标(发现select seq_article.nextval from dual的值未变,这是因为执行游标这个步骤里的很多事情延迟到fetch那个步骤了,即execute(l_cursor)实际并未在执行该SQL语句)

end loop;

dbms_sql.close_cursor(l_cursor);//关闭游标

END;

故而改为:

DECLARE

l_cursor INTEGER;

l_retval INTEGER;

BEGIN

l_cursor := dbms_sql.open_cursor;  //打开游标

dbms_sql.parse(l_cursor,'select seq_article.nextval from dual’,1); //解析游标,此时,游标与某一SQL语句相关联了

l_retval := dbms_sql.execute(l_cursor); //执行游标

for ind in 1..(52243-51538) loop

dbms_sql.fetch_rows(l_cursor) ;end loop;

dbms_sql.close_cursor(l_cursor);//关闭游标

END;

或是

select seq_article.nextval from 表T;//

表T

有几行记录,序列就被执行几次

seq_article.nextval

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值