Вставить оператор SELECT в Oracle 11G - PullRequest
32 голосов
/ 06 сентября 2011

Я пытаюсь выполнить очень простой SQL-оператор в Oracle 11g.

 insert into table1 (col1, col2) values (select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2);

Очень простой запрос.Декартово объединение старой таблицы 1 со старой таблицей 2, помещение результирующих значений в таблицу 1.

Я сам запустил подзапрос, и он отлично работает.чтобы выполнить полный оператор, я получаю следующую ошибку:

 SQL Error: ORA-00936: missing expression
 00936. 00000 -  "missing expression"

Я также не могу заставить его работать в MySql.Что-то не так с моим утверждением, но я не уверен, что это такое.

Ответы [ 5 ]

75 голосов
/ 06 сентября 2011

Ваш запрос должен быть:

insert into table1 (col1, col2) 
select t1.col1, t2.col2 
from oldtable1 t1, oldtable2 t2

Т.е. без VALUES части.

13 голосов
/ 06 сентября 2011

Избавьтесь от ключевого слова values и скобок.Вы можете увидеть пример здесь .

Это основной синтаксис INSERT:

INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...);

Это синтаксис INSERT SELECT:

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2";
8 голосов
/ 06 сентября 2011

Вам не нужно выражение 'values', когда вы используете 'select' в качестве источника.

insert into table1 (col1, col2) 
select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2;
1 голос
/ 06 апреля 2013

Существует еще одна опция для вставки данных в таблицу.

insert into tablename values(&column_name1,&column_name2,&column_name3);

откроется другое окно для вставки значения данных ..

1 голос
/ 06 апреля 2013

для вставки данных в таблицу вы можете написать

insert into tablename values(column_name1,column_name2,column_name3);

, но запишите column_name в последовательности согласно последовательности в таблице ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...