由于alter sequence
是DDL,所以无法更改普通SQL的增量,因此您需要逐个增加多次。这将增加序列多次,您目前拥有的最高ID:
select your_sequence.nextval
from (
select max(id) as max_id
from your_table
) t
connect by level < t.max_id;
SQL Fiddle demo(捏造有点仿佛架构缓存序列不复位)。
如果你有很高的价值,虽然这可能是低效的,但作为一次性调整可能无关紧要。您无法引用子查询或CTE中的当前序列值,但您可以查看USER_SEQUNECES
视图,以获取有关您开始时的距离的粗略指导,并将呼叫数量减少到两倍以内大小(取决于缓存保存多少等待值):
select your_sequence.nextval
from (
select max(id) as max_id
from your_table
) t
connect by level <= (
select t.max_id + us.cache_size + 1 - us.last_number
from user_sequences us
where sequence_name = 'YOUR_SEQUENCE'
);
SQL Fiddle。
由于现有ID值较低,第二个可能会做更多的工作,但如果值较高,则可以看到第二个进入自己的位置。
取决于您使用哪个数据库管理系统,sqlserver,mysql或其他? – Pseudonym
您想重置一次或在每次插入记录时查找最大的ID? –
@由于OP询问[tag:plsql],所以假设他的意思是[tag:oracle]是安全的。 – Mureinik