Insérer une instruction SELECT dans Oracle 11G

J'essaie d'exécuter une instruction sql très simple dans Oracle 11g.

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

Requête très simple. Cartésien joindre l'ancienne table 1 à l'ancienne table 2, mettre les valeurs résultantes dans la table 1.

J'ai exécuté la sous-requête par elle-même, et cela fonctionne parfaitement.

 select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2

Lorsque j'essaie d'exécuter l'instruction complète, j'obtiens l'erreur suivante:

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

Je ne peux pas le faire fonctionner dans MySql non plus. Quelque chose ne va pas dans ma déclaration, mais je ne suis pas sûr de ce que c'est.

31
demandé sur Brian 2011-09-06 20:53:39

5 réponses

Votre requête devrait être:

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

C'est-à-dire sans la partie VALUES.

70
répondu Ryan 2013-06-21 14:59:25

Débarrassez-vous du mot clé values et des parens. Vous pouvez voir un exemple ici.

C'est la syntaxe D'insertion de base:

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

C'est la syntaxe de sélection D'insertion:

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2";
9
répondu cwallenpoole 2018-05-31 16:30:16

Vous n'avez pas besoin de la clause 'values' lorsque vous utilisez un 'select' comme source.

insert into table1 (col1, col2) 
select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2;
7
répondu Chains 2011-09-06 16:56:13

Pour insérer des données dans la table, vous pouvez écrire

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

, Mais écrire le column_name dans la séquence par séquence dans le tableau ...

1
répondu sudarshan 2017-01-23 19:54:14

Il existe une autre option pour insérer des données dans la table ..

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

Il ouvrira une autre fenêtre pour insérer la valeur de données..

1
répondu sudarshan 2017-01-23 19:54:29