我ORA-00947: not enough values
从下面的查询中得到:
insert into tableb
(colA, colb, colc, cold)
select
(select max(rec_no)+1 from tableb)
F2,
F3,
F4
from tablea;
有人可以指出正确的方法来包含插入/选择语句的子查询吗?
谢谢
你只是少了一个逗号。事实上,Oracle 认为F2
是您的子选择的名称。
insert into tableb
(colA, colb, colc, cold)
select
(select max(rec_no)+1 from tableb) , -- comma here
F2,
F3,
F4
from tablea;
生成唯一 ID 的唯一可靠、快速且可扩展的方法是使用序列。
“解决方案”不起作用的原因max()
是一个事务不会看到另一个事务未提交的更改。因此,两个并发事务可以使用相同的值结束,max()
这反过来会生成重复的 id 值。
要在您的情况下从序列创建值,您显然需要首先创建一个序列:
create sequence seq_b;
然后在您的选择语句中使用该序列:
insert into tableb
(colA, colb, colc, cold)
select seq_b.nextval,
F2,
F3,
F4
from tablea;