Oracle 大容量插入失败,因为序列不会自动递增

oracle bulk insert fails because sequence does not increment automatically

提问人:Victor 提问时间:2/27/2013 更新时间:2/23/2017 访问量:1891

问:

我正在尝试使用另一个表的数据对预言机表进行多次插入,并且我还使用序列。像这样的东西:http://www.dbforums.com/oracle/1626242-insert-into-table-sequence-value-other-table.html

现在。。在目标表中,列上有一个主键,该主键正在由序列填充,它给了我主键冲突。我的猜测是 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;
Oracle11G BulkInsert 序列

评论

0赞 A.B.Cade 2/27/2013
是你的主键吗?那个 sould 得到序列值的那个?我问是因为你也有inner_viewcol1col1
0赞 Victor 2/27/2013
是的,col1 是主键

答:

1赞 Justin Cave 2/27/2013 #1

在我看来,问题不太可能是调用序列不起作用。更有可能的是,其他进程在表中插入了主键值大于当前从序列返回的值的数据。如果你nextval

SELECT seq_cnt.nextval
  FROM dual

并将其与表中主键的最大值进行比较

SELECT max(col1)
  FROM xxxxx

我的赌注是最大值大于序列中的最大值。如果是这种情况,您通常希望将序列重置为当前最大值,并弄清楚有问题的数据是如何插入的,以便将来不会再次发生问题。nextval

评论

0赞 Victor 2/27/2013
感谢神谕神洞先生
0赞 Asiri Ranatunga 2/23/2017 #2

外部查询不会循环,因此序列不会递增。试试下面的解决方案

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;