[英]Oracle - SQL - insert into with sub select
我收到的是ORA-00947: not enough values
以下查詢中的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;
有人能指出我將inser的子查詢包含在/ select語句中的正確方法嗎?
謝謝
你只是錯過了一個逗號。 事實上,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;
然后在select語句中使用該序列:
insert into tableb
(colA, colb, colc, cold)
select seq_b.nextval,
F2,
F3,
F4
from tablea;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.