oracle使用序列的问题

平生我自如 2009-12-30 10:26:47
我建了一个序列seq!建立一个表表a,表的主键就是这个序列
我通过seq.nextval为主键向表中插入数据
1 ……
2……
3……
4……
5……
然后我把第二条记录删除了,也就是2…… 这条记录没了
当我再次插入数据的时候!
我如何才能插入2………… 而不是6…………谢谢

注:我在建立序列的时候已经将cycle选项勾上了
...全文
73 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ojuju10 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 zqd5920 的回复:]
我建了一个序列seq!建立一个表表a,表的主键就是这个序列
我通过seq.nextval为主键向表中插入数据
1 ……
2……
3……
4……
5……
然后我把第二条记录删除了,也就是2…… 这条记录没了
当我再次插入数据的时候!
我如何才能插入2………… 而不是6…………谢谢

注:我在建立序列的时候已经将cycle选项勾上了
[/Quote]

--序列无法实现的,cycle表示循环,如果超过了最大值,就由最小值开始
序列相当于标识列,没有什么实在的含义
小灰狼W 2009-12-30
  • 打赏
  • 举报
回复
序列的作用是唯一性,我觉得没有必要去那么节约
找最小空号可以用
select max(c_pk)+1 from 表a t
start with c_pk=1
connect by prior c_pk=c_pk-1;
平生我自如 2009-12-30
  • 打赏
  • 举报
回复
大家帮帮忙! 我该怎么得到这个被删除了的值 谢谢了
平生我自如 2009-12-30
  • 打赏
  • 举报
回复
这个语句有点问题!但是我找不出什么毛病来……
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
[Quote]那我该怎么控制呢!能提示一下吗?[/Quote]

select min(c_pk) from 表a t
where c_pk>1 and not exists(select 1 from 表a where c_pk=t.c_pk-1)

找到最小的空号
Phoenix_99 2009-12-30
  • 打赏
  • 举报
回复
sequence只负责产生序列号,此序列已经产生过了,序列不会给你找到,只能你自己解决
平生我自如 2009-12-30
  • 打赏
  • 举报
回复
那我该怎么控制呢!能提示一下吗?
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
[Quote]注:我在建立序列的时候已经将cycle选项勾上了[/Quote]只有用完才会从1再开始。

你只能自己找对出空出的号码,然后插入了,sequence 是不会帮你做这个事情的。sequence只负责产生序列号。
平生我自如 2009-12-30
  • 打赏
  • 举报
回复
麻烦!结帖 不干了
lvxiao715 2009-12-30
  • 打赏
  • 举报
回复
同楼上上。
smmgd 2009-12-30
  • 打赏
  • 举报
回复
同楼上。

找最小空号
select min(id) from (
select id,rownum rn from table order by id
) where id<>rn

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧