我在开发环境中有一些插件要发布,开发人员在插入时没有使用序列来获取正确的标识符。他所做的就是进入生产数据库,找出最大的标识符是什么,并为其添加了几百个数字。为了引导他现在离开了公司。
所以prod的脚本充满了数百个:
INSERT INTO table (sequencecol, cola, colb) VALUES (90001,'test','test');
INSERT INTO childtableB (foreignkeyTableA, cola) VALUES (90001,'test')
什么时候应该
INSERT INTO tableA (sequencecol, cola, colb) VALUES (tablesequence.NEXTVAL,'test','test');
INSERT INTO childtableB (foreignkeyTableA, cola) VALUES (tablesequence.CURRVAL,'test')
我正在处理的scneario比这更复杂,我没有时间重写,而只是想将序列设置为作为此脚本的一部分插入的记录的最大值。
是否可以更改序列的值以将其设置为我要插入的记录的最高值+1的值?
我愿意接受更好的建议
答案 0 :(得分:10)
方法很好。
但是查看answers to this related questions,将序列重置为特定值并不容易。
由于你不需要在这里 back ,也许只需编写一个小循环,在循环中消耗序列中的数字,直到你需要它为止。
或者,如果是数字this的批次:
-- First, alter the object so the next increment will jump 1000 instead of just 1.
alter sequence myschema.seq_mysequence increment by 1000;
-- Run a select to actually increment it by 1000
select myschema.seq_mysequence.nextval from dual;
-- Alter the object back to incrementing only 1 at a time
alter sequence myschema.seq_mysequence increment by 1;