0

我正在尝试使用另一个表的数据对 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;
4

2 回答 2

1

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

SELECT seq_cnt.nextval
  FROM dual

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

SELECT max(col1)
  FROM xxxxx

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

于 2013-02-26T17:26:56.583 回答
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;
于 2017-02-22T17:13:32.110 回答