免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 19850 | 回复: 4
打印 上一主题 下一主题

oracle sequence想修改nextval的值并立即生效的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-07 16:38 |只看该作者 |倒序浏览
oracle 当初建立一个sequence,为插入的单子分配一个主键,但是过程中导入一批旧单子,这批单子的主键没有按照顺序,后期可能导致插入记录出现主键冲突,所以我想现在把sequence的nextval给修改一下,避免出现冲突,但是ALTER SEQUENCE 将不会立即影响后端的 nextval 结果,除了当前的之外, 因为它又已经缓冲了的序列号。它们只有再使用光所有已经缓冲的数值之后才能意识到改变了的序列参数。

各位兄弟姐妹,求教了,只要能达到效果的方法都行

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
2 [报告]
发表于 2008-11-07 16:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2008-11-07 17:16 |只看该作者
感谢LS的回复,但是除了删除序列有没有其他办法了,我就是不想删除这个序列所以才想改nextval的值。
select task_seq.nextval from dual
alter sequence task_seq increment by 200
alter sequence task_seq increment by 1
我用测试机试了一下,这个可以实现nextval值的修改
我的需求:currval=54278 nextval=54279,表中最大max(id) = 302816
想nextval改为302817,不知道直接改会不会出错,麻烦给个意见

论坛徽章:
0
4 [报告]
发表于 2008-11-07 21:47 |只看该作者
给两个建议:
1. 用一个循环,取nextval,直到所需的值
2. 在业务逻辑中,取nextval时做判断,如有冲突,取下一个nextval

论坛徽章:
0
5 [报告]
发表于 2008-11-10 10:13 |只看该作者
谢谢版主回复,问题解决了,我还是使用了alter sequence task_seq increment by n来的
1. 用一个循环,取nextval,直到所需的值

我觉得increment by比一个循环连续取来的更快点,只是需要精确的知道跨度是多少

2. 在业务逻辑中,取nextval时做判断,如有冲突,取下一个nextval

这个修改起来有点麻烦,不过对后期很有预见性的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP