手动转发序列 – oracle sql

前端之家收集整理的这篇文章主要介绍了手动转发序列 – oracle sql前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要转发一组只有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(或现在的任何值).

猜你在找的Oracle相关文章