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

时间:2013-02-26 17:15:03

标签: oracle11g bulkinsert sequences

我正在尝试使用另一个表中的数据对oracle表进行多次插入,我也使用了一个序列。这样的事情: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;

2 个答案:

答案 0 :(得分:1)

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

SELECT seq_cnt.nextval
  FROM dual

并将其与表

中主键的最大值进行比较
SELECT max(col1)
  FROM xxxxx

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

答案 1 :(得分:0)

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

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;