我在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中正确导入这些行?
感谢您的建议
答案 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;