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