oracle如何设置序列当前值
来源:互联网 发布:知与行杂志版面费 编辑:程序博客网 时间:2024/06/06 03:19
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----------21SQL> alter sequence seq increment by 79;序列已更改。SQL> select seq.nextval from dual;NEXTVAL----------100SQL> alter sequence seq increment by 1;序列已更改。SQL> select seq.nextval from dual;NEXTVAL----------101SQL>
做个循环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 0
- oracle如何设置序列当前值
- oracle如何设置序列当前值
- oracle如何修改 序列当前的最大值?
- oracle修改序列当前值
- oracle 修改序列当前值
- oracle如何设置序列自动增长
- oracle取得序列当前值(不改变当前序列值)
- 强制获取序列下一个值/当前值(oracle函数)
- ORACLE设置当前日期格式
- Oracle数据库当前的nls_date_format参数值查询及设置
- Oracle数据库当前的nls_date_format参数值查询及设置
- 根据序列名得到当前序列值
- oracle设置自增字段,oracle序列
- oracle中如何使用序列
- Oracle中如何创建序列
- Oracle中如何创建序列
- php与oracle数据库实现由序列获取当前表可insert的id值
- oracle设置某一个字段为当前时间
- 红宝书 第17章整理——错误处理
- Android 定时器
- 在jsp页面中使用EL表达式无法解析spring mvc中Model或者ModelAndView传的值
- 仅针对IE8的css hack
- ros::spin() 和 ros::spinOnce() 区别及详解
- oracle如何设置序列当前值
- hdu 3810 超大容量背包(n=50不是40)
- jsp ajax实例讲解
- H5 游戏开发技术要点
- topcoder FoxAndCity
- 深圳社保明细查询
- Linux文件系统简介
- Ubuntu16.04 docker安装
- React Native笔记