我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;
Run Code Online (Sandbox Code Playgroud)
有人能指出我将inser的子查询包含在/ select语句中的正确方法吗?
谢谢
Thi*_*ilo 15
你只是错过了一个逗号.事实上,Oracle认为F2是您的子选择的名称.
insert into tableb
(colA, colb, colc, cold)
select
(select max(rec_no)+1 from tableb) , -- comma here
F2,
F3,
F4
from tablea;
Run Code Online (Sandbox Code Playgroud)
生成唯一ID的唯一可靠,快速和可扩展的方法是使用序列.
max()"解决方案"无法工作的原因是,事务不会从另一个事务中看到未提交的更改.因此,两个并发事务可以使用相同的值结束,max()这反过来将生成重复的id值.
要在您的案例中创建序列中的值,您显然需要首先创建一个序列:
create sequence seq_b;
Run Code Online (Sandbox Code Playgroud)
然后在select语句中使用该序列:
insert into tableb
(colA, colb, colc, cold)
select seq_b.nextval,
F2,
F3,
F4
from tablea;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19997 次 |
| 最近记录: |