我需要转发一组只有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(或现在的任何值).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。