我需要转发一组只有DML访问的序列.由于一段代码中的错误,在没有序列的情况下抓取了几个值,而是手动抓取,所以现在序列正在复制这些值.所以,我想将序列推到最大值,以便下次调用nextval时,它会给出一个高于最大值的值.我有大约50个序列,每个序列都需要前进几千个.
只有DML访问才有可能吗?如果是这样,我应该怎么做呢?
您可以使用动态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;
如果您能够针对序列发出DDL,则可以使用类似的方法将INCREMENT设置为10,000,从序列中选择一个值,并将INCREMENT设置为1(或现在的任何值).