手动转发序列 – oracle sql
发布时间:2020-12-12 13:10:10 所属栏目:百科 来源:网络整理
导读:我需要转发一组只有DML访问的序列.由于一段代码中的错误,在没有序列的情况下抓取了几个值,而是手动抓取,所以现在序列正在复制这些值.所以,我想将序列推到最大值,以便下次调用nextval时,它会给出一个高于最大值的值.我有大约50个序列,每个序列都需要前进几千
我需要转发一组只有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(或现在的任何值). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |