Jus*_*ave 10
您可以使用动态SQL来执行此操作.例如,这段代码将从每个序列列表中选择下一个10,000个值.
DECLARE
l_num INTEGER;
BEGIN
FOR seq IN (select *
from all_sequences
where sequence_name in (<<list of 50 sequences>>)
and sequence_owner = <<owner of sequences>>)
LOOP
FOR i IN 1 .. 10000
LOOP
execute immediate
'select ' || seq.sequence_owner || '.' || seq.sequence_name || '.nextval from dual'
into l_num;
END LOOP;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
如果您能够针对序列发出DDL,则可以使用类似的方法将其设置INCREMENT为10,000,从序列中选择一个值,然后将其设置INCREMENT为1(或现在的任何值).
您应该确定序列的下一个值与所需值之间的差异.所需的值通常是主键列的最大值(让我们将其命名为ID).
DECLARE
maxid NUMBER;
maxseq NUMBER;
temp NUMBER; -- without this variable Oracle would skip to query the sequence
BEGIN
SELECT MAX(ID) INTO maxid FROM MYTABLE;
SELECT MYSEQ.NEXTVAL INTO maxseq FROM DUAL;
FOR i IN maxseq .. maxid LOOP
SELECT MYSEQ.NEXTVAL INTO temp FROM DUAL;
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)