我的要求如下 . (a)我已经创建了序列,并且有一个表(假设员工有id,name..etc) . (b)我的序列如何被破坏,当前序列的当前值与employee表的id列的最大值不同步 .
现在我想将我的序列重置为employee表的id列的最大值 . 我知道我们可以通过使用PL / SQL,存储过程轻松完成 . 但我想写简单查询,它将执行以下任务 . 1-获取id的最大值和我的序列的当前值 . 取一个差值,并使用increment by将这个差值添加到序列中 . (此处我的序列的当前值小于id列的最大id值)
2 回答
您可以使用'ALTER SEQUENCE'命令更改序列的值 .
要使用新的基值重新启动序列,您需要删除并重新创建它 .
我不认为你可以通过简单的SELECT查询来做到这一点 .
Here is the Oracle 10g documentation for ALTER SEQUENCE .
您无法更改普通SQL的增量,因为
alter sequence
是DDL,因此您需要逐个递增多次 . 这会将序列增加的次数与您当前拥有的最高ID一样多:SQL Fiddle demo(如果在缓存模式时序列未重置,则稍微捏一下) .
如果你有一个很高的值,虽然这可能是低效的,但作为一次性调整,可能没有引用子查询或CTE中的当前序列值,但你可以查看
USER_SEQUNECES
视图以获得粗略的指导你要开始多远,并将调用次数减少到案例大小的两倍(取决于缓存持有的等待值的数量):SQL Fiddle .
使用较低的现有ID值时,第二个可能会做更多的工作,但是如果值越高,您可以看到第二个就会有更多的工作 .