簡體   English   中英

Oracle SQL 中的插入選擇查詢缺少表達式錯誤

[英]Missing expression Error with Insert Select query in Oracle SQL

我在使用插入選擇查詢的 Oracle SQL 中遇到了這個錯誤,而不是來自 SQL 查詢的錯誤是:

insert into GroupScenarioAction (ID, ID_UUID, GPSCENARIO_UUID, ACTION, VERSION)
(select DEFAULT , '0', ACTION.ID_UUID, '5310AFAA......', '1', ACTION_ID, '0'
from ACTION where ACTION.id not in (select ACTION FROM GroupScenarioAction where 
GPSCENARIO = '1'));

錯誤是 ORA-00936: 缺少表達式位置 129

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

很難提供幫助,因為

  • 您將相關數據作為圖像發布(為什么您希望我們輸入所有內容以便我們可以嘗試?)而不是代碼(可以輕松復制/粘貼並在之后使用)
  • 您發布的代碼( insert語句本身)使用的列在您發布其描述的任何表中都不存在
    • 例如, insert插入到GroupScenarioAction ,但那里沒有這樣的表; 也許是goroohscenarioaction 或者, action表中沒有action_id
  • 您將值插入5列,但select語句包含7列; 引發ORA-00913: too many values錯誤,你甚至沒有遇到缺失的表達式錯誤

很快,就好像你想盡一切努力阻止我們幫助你。


你發表的評論之一說

這是主鍵,那么這些值應該來自哪里?

這是default關鍵字

insert into GroupScenarioAction (ID, ...)
   (select DEFAULT, ...
           -------
           this

看起來ID列是作為身份列創建的,其值是自動生成的(即 Oracle 會處理它),這也意味着您使用的是 Oracle 12c 或更高版本(較低版本中沒有這樣的選項)。 另一方面, create table goroohscenarioaction語句並沒有提出類似的建議。


無論如何:如果你做對了,它就會起作用。 我創建了兩個具有最小列集的示例表,只是為了使insert工作。 另外,由於我使用的是 11gXE(它不支持標識列,我插入了一個序列值,基本上,它是標識列在后台使用):

SQL> create table groupscenarioaction
  2    (id              number,
  3     id_uuid         raw(255),
  4     gpscenario_uuid raw(255),
  5     action          number,
  6     version         number
  7    );

Table created.

SQL> create table action
  2    (id_uuid  raw(255),
  3     id       number
  4    );

Table created.

SQL> create sequence seq;

Sequence created.

插入你張貼的; 我注釋掉了不存在或多余的列。 有效 但是,由於我的表是空的,因此沒有插入任何內容,但它不會引發任何錯誤:

SQL> insert into GroupScenarioAction
  2    (ID, ID_UUID, GPSCENARIO_UUID, ACTION, VERSION)
  3    (select 1 /*DEFAULT*/ , '0', ACTION.ID_UUID, '5310AFAA......', '1' --, id /*ACTION_ID*/, '0'
  4     from ACTION
  5     where ACTION.id not in (select ACTION FROM GroupScenarioAction
  6                             where  gpscenario_uuid/*GPSCENARIO*/ = '1'));

0 rows created.

美化:

SQL> insert into groupscenarioaction
  2    (id, id_uuid, gpscenario_uuid, action, version)
  3    (select seq.nextval, '0', a.id_uuid, '5310AFAA......', '1'
  4     from action a
  5     where a.id not in (select g.action
  6                        from groupscenarioaction g
  7                        where g.gpscenario_uuid = '1'));

0 rows created.

SQL>

現在您對幫助您的麻煩有了更多的了解,如果我寫的還不夠,請考慮編輯您發布的原始問題(只需刪除所有錯誤的內容並寫一些我們可以使用的真實內容) .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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