在主键中按顺序填充数据到表中手动插入数据

时间:2020-03-06 14:33:43  来源:igfitidea点击:

我有许多表使用触发器/序列列在其主键上模拟auto_increment,这在一段时间内效果很好。

为了加快对使用db的软件执行回归测试所需的时间,我使用一些示例数据创建了控制文件,并将这些文件的运行添加到了构建过程中。

尽管测试过程是从头开始安装架构的,但是此更改导致大多数测试崩溃,并且序列返回表中已经存在的值。有什么办法以编程方式说"将序列更新为列中的最大值",还是我需要手工写出一个脚本来更新所有这些序列,或者我是否可以更改将空值替换为触发器的触发器?顺序来一些如何检查这一点(尽管我认为这可能会导致变异表问题)?

解决方案

作为架构重建的一部分,为什么不删除并重新创建序列呢?

我们可以生成一个脚本来创建具有所需起始值的序列(基于它们的现有值)...。

SELECT 'CREATE SEQUENCE '||sequence_name||' START WITH '||last_number||';'
FROM   ALL_SEQUENCES
WHERE  OWNER = your_schema

(如果我正确理解了这个问题)

这是一种更新序列值的简单方法,在这种情况下,如果序列当前为50,则将其设置为1000:

alter sequence MYSEQUENCE increment by 950 nocache;
select MYSEQUENCE_S.nextval from dual;
alter sequence MYSEQUENCE increment by 1;

PL / SQL Developer的创建者在其工具中加入了此技术,对此表示由衷的感谢。