web-dev-qa-db-fra.com

Instruction INSERT 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 joint l'ancienne table 1 à l'ancienne table 2, place les valeurs obtenues 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, le message d'erreur suivant s'affiche:

 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.

33
Brian

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.

77
Ryan

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

Ceci est la syntaxe de base INSERT:

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

Voici la syntaxe INSERT SELECT:

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2";
13
cwallenpoole

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;
8
Chains

pour l'insertion de données dans la table, vous pouvez écrire

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

mais écris le column_name dans la séquence selon la séquence dans le tableau ...

1
sudarshan

Il existe une autre option pour insérer des données dans un tableau.

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

cela ouvrira une autre fenêtre pour insérer la valeur de donnée.

1
sudarshan