2008-09-22 17 views
1

我有一些表使用触发器/序列列来模拟他们的主键上的auto_increment已经很好的一段时间了。手动插入数据在一个或多个主键中填充序列的表格(s)

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

此更改导致大部分测试崩溃,因为测试过程从头开始安装模式,并且这些顺序正在返回表中已存在的值。有没有什么办法可以通过编程的方式说“更新序列到列中的最大值”,还是我需要用手写出一个更新所有这些序列的整个脚本,还是我可以/应该更改将空值替换为序列到一些如何检查(尽管我认为这可能会导致突变表问题)?

回答

1

您可以生成一个脚本来创建你所需要的启动值序列(根据其现有值)....

选择“CREATE SEQUENCE‘|| SEQUENCE_NAME ||’ START WITH'|| last_number ||';' FROM ALL_SEQUENCES WHERE OWNER = your_schema

(如果我理解正确的问题)

+0

我有一个将数据转储到控制文件的脚本。我将这个过程扩展为转储drop和创建语句到一个单独的脚本,我从控制文件导入所有数据后运行。 – 2008-09-22 21:16:35

0

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

+0

模式重建会删除包括序列的每个数据库对象。问题在于,当它们被重新创建时,它们都有一个默认的起始值为零,并且从sqlldr加载的示例数据中的表中已经有ID为0到X的表中的记录。 – 2008-09-22 20:36:43

1

这里有一个简单的方法来更新序列值 - 在这种情况下,顺序设置为1000,如果它是目前50:

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

对于PL/SQL Developer的创建者来说,在他们的工具中包含这种技术是很荣幸的。

相关问题