由於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