Oracle11g oracle批量插入失败,因为序列不会自动递增
我试图使用另一个表中的数据对oracle表进行多次插入,并且我还使用了一个序列。大概是这样的: 现在..在目标表中,序列填充的列上有一个主键,它给了我主键冲突。我猜sequence.nextval由于某种原因不起作用。错误在哪里?这是我的实际查询:Oracle11g oracle批量插入失败,因为序列不会自动递增,oracle11g,bulkinsert,sequences,Oracle11g,Bulkinsert,Sequences,我试图使用另一个表中的数据对oracle表进行多次插入,并且我还使用了一个序列。大概是这样的: 现在..在目标表中,序列填充的列上有一个主键,它给了我主键冲突。我猜sequence.nextval由于某种原因不起作用。错误在哪里?这是我的实际查询: insert into xxxx (col1, col2, col3, col4, col5) select SEQ_CNT.nextval, inner_view.* from (select col1, 26, 0, 'N'
insert into xxxx (col1, col2, col3, col4, col5)
select SEQ_CNT.nextval, inner_view.*
from (select col1, 26, 0, 'N'
FROM yyyy WHERE col_ID = 30 AND DELETED = 'N' ) inner_view;
在我看来,问题不大可能是对序列调用
nextval
不起作用。更有可能的是,其他进程在表中插入了主键值大于当前从序列返回的值的数据。如果你
SELECT seq_cnt.nextval
FROM dual
并将其与表中主键的最大值进行比较
SELECT max(col1)
FROM xxxxx
我打赌最大值大于序列中的
nextval
。如果是这种情况,您通常希望将序列重置为当前最大值,并确定问题数据是如何插入的,以便将来不再发生问题。外部查询不会循环,因此序列不会增加。尝试下面的解决方案
insert into xxxx (col1, col2, col3, col4, col5)
select inner_view.*
from (select SEQ_CNT.nextval, col1, 26, 0, 'N'
FROM yyyy WHERE col_ID = 30 AND DELETED = 'N' ) inner_view;
col1
是您的主键吗?应该得到序列值的那个?我这样问是因为你的内心世界里也有一个col1
。是的,col1是主键。感谢上帝,凯夫先生