Insert with multiple selects Insert with multiple selects oracle oracle

Insert with multiple selects


You need to switch to INSERT/SELECT:

INSERT INTO my_table (value0, value1, value2, value3) SELECT DISTINCT (SELECT MAX(value0) FROM some_table), '5', value2, '8'FROM another_table;

To answer your comment on jarlh's post: "What if some_table = my_table and value0 needs to be incremented each time a value is inserted ?"

INSERT INTO my_table (value0, value1, value2, value3) SELECT   (SELECT MAX(value0) FROM my_table)      + ROWNUM -- ROW_NUMBER() OVER (ORDER BY whatever you need)  ,'5'  ,value2  ,'8'FROM  (    SELECT DISTINCT value2    FROM another_table  ) dt

Edit:

I switched to ROWNUM, but this is proprietary syntax. Oracle also supports Standard SQL's ROW_NUMBER and it should be working as-is, too.


You can covert these two queries to a single one by cross joining the query from some_table with the results of anoter_table. The hard coded literal could also be selected.

Additionally, note that for inserting a select result you don't need the values keyword:

INSERT INTO my_table (value0, value1, value2, value3) SELECT      DISTINCT max_value_0, '5', value2, '8'FROM        another_tableCROSS JOIN  (SELECT MAX(value0) AS max_value_0             FROM some_table) t


Do INSERT with SELECT instead:

INSERT INTO my_table (value0, value1, value2, value3)    SELECT DISTINCT (SELECT MAX(value0) FROM some_table), 5, value2, 8    FROM another_table