首页 > 解决方案 > 在循环语句 Oracle9 中插入 id

问题描述

我正在尝试使用 for 循环在表中插入一堆数据。对于主键,我正在尝试使用一个序列,但我得到了:

ORA-00001: 违反唯一约束 (constraint_name) 错误。

我的代码如下所示:

FOR a IN (select * from table a)
LOOP 

    select seq.nextval into id1 from dual;

    insert into table b (primarykey, value1...)

    select (id1, value1...) from table c

end loop

任何想法为什么我仍然会得到一个独特的约束错误?

标签: sqloraclefor-loopplsqlunique-constraint

解决方案


我猜表 c 包含不止一行:

FOR a IN (select * from table_a) LOOP
  select seq.nextval into id1 from dual;

  insert into table_b (primarykey, value1...)
  select id1, value1... from table_c;    
  -- the same id1 will be used for many rows 
  -- and cause `UNIQUE` constraint violation

end loop;

我会将其重写为:

INSERT INTO table_b(primarykey, value1...)
SELECT seq.nextval, value1, ...
FROM table_c
WHERE ....;

推荐阅读