简体   繁体   中英

Missing expression Error with Insert Select query in Oracle SQL

i got this error with Oracle SQL with Insert Select query and don't where the error comes from the SQL Query is:

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'));

the error is ORA-00936: missing expression Position 129

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

It is difficult to assist because

  • you posted relevant data as images (why do you expect us to type all of that so that we could try it?) instead of code (which can easily be copy/pasted and used afterwards)
  • code you posted (the insert statement itself) uses columns that don't exist in any tables whose description you posted
    • for example, insert inserts into GroupScenarioAction , but there's no such table there; maybe it is goroohscenarioaction ? Or, there's no action_id column in the action table
  • you're inserting values into 5 columns, but select statement contains 7 columns; that raises ORA-00913: too many values error, you don't even come to the missing expression error

Shortly, as if you tried to do everyhing you could to prevent us from helping you.


One of comments you posted says

It's the primary key so where are those values supposed to come from?

That's the default keyword in

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

Looks like the ID column is created as an identity column whose value is autogenerated (ie Oracle takes care about it), which also means that you're on Oracle 12c or above (there was no such an option in lower versions). On the other hand create table goroohscenarioaction statement doesn't suggest anything like that.


Anyway: if you do it right , it works. I created two sample tables with a minimum column set, just to make insert work. Also, as I'm on 11gXE (which doesn't support identity columns, I'm inserting a sequence value which is, basically, what identity column uses in the background anyway):

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.

Insert you posted; I commented out columns that either don't exist or are superfluous. It works ; though, didn't insert anything as my table(s) are empty, but it doesn't raise any error:

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.

Beautified:

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>

Now that you know a little bit more about what's bothering use to help you, and if what I wrote isn't enough, consider editing the original question you posted (simply remove everything that's wrong and write something that is true and we can use).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM