Oracle11g oracle批量插入失败,因为序列不会自动递增

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'

我试图使用另一个表中的数据对oracle表进行多次插入,并且我还使用了一个序列。大概是这样的:

现在..在目标表中,序列填充的列上有一个主键,它给了我主键冲突。我猜sequence.nextval由于某种原因不起作用。错误在哪里?这是我的实际查询:

    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是主键。感谢上帝,凯夫先生