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.
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
.
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";
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;
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 ...
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..