簡體   English   中英

Oracle - SQL - 插入子選擇

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM