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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |