插入数据时随机主要的Constraint违规

时间:2014-05-20 07:48:52

标签: oracle primary-key oracle-sqldeveloper

我在Oracle数据库中插入了许多行(大约200行)。 sql脚本(我从Ruby生成)看起来像这样:

INSERT INTO MY_TABLE(ID, COL_1, COL_2, COL_3) VALUES (MY_TABLE_SEQ.NEXTVAL, VAL_1, VAL_2,VAL_3);
INSERT INTO MY_TABLE(ID, COL_1, COL_2, COL_3) VALUES (MY_TABLE_SEQ.NEXTVAL, VAL_1, VAL_2,VAL_3);
INSERT INTO MY_TABLE(ID, COL_1, COL_2, COL_3) VALUES (MY_TABLE_SEQ.NEXTVAL, VAL_1, VAL_2,VAL_3); 
     ....

当我在oracle sqlDeveloper中运行此脚本时,我对某些行有随机的主要约束违规。如果我用这些行重新启动脚本,我没有更多的错误。 我试图每100行插入一次提交,但仍然有相同的错误。

该错误的原因是什么?我想导入所有这些行而不违反这些约束,如何在Oracle中正确导入这些行?

感谢您的建议

1 个答案:

答案 0 :(得分:3)

my_table_seq.nextval生成什么值?如果它生成的值低于my_table.id中的现有值,则可能会遇到此类问题。

测试一下:

select max(id) from my_table;

select my_table_seq.nextval from dual;

如果序列生成的数字低于表中的最大值(ID),则可以使用足够高的起始值重新创建序列:

drop sequence my_table_seq;
create sequence my_table_seq start with 123;