我有许多表使用触发器/序列列来模拟主键上的auto_increment,这些表已经有效了一段时间。

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

此更改导致大多数测试崩溃,但测试过程从头开始安装架构,并且序列返回表中已存在的值。有没有办法以编程方式说“将序列更新为列中的最大值”或者我是否需要手动写出一个更新所有这些序列的完整脚本,或者我/我是否应该更改用该序列的null值替换的触发器来检查这个(虽然我认为这可能会导致变异表问题)?

有帮助吗?

解决方案

您可以生成一个脚本,使用您需要的起始值(基于其现有值)创建序列....

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的创建者致敬,感谢他们将这项技术纳入其工具中。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top