Oracle DB : 3 astuces (et demi) pour insérer plusieurs lignes avec INSERT

Comment insérer plusieurs lignes au moyen d'une seule syntaxe INSERT Oracle ? Plutôt que de rédiger cinq instructions INSERT pour insérer cinq lignes dans une table, voici trois astuces pour le faire en une seule fois.

Une instruction INSERT ajoute un ou plusieurs enregistrements à n'importe quelle table d'une base de données relationnelle.

DB Logo

Pour qu'un utilisateur puisse insérer des lignes dans une table, cette dernière doit figurer dans le schéma propre à cet utilisateur, ou celui-ci doit disposer d'un privilège d'objet INSERT sur la table.

Si vous utilisez Oracle 10g ou une version supérieure, voici comment utiliser Insert All pour insérer plusieurs lignes de données issues de tables différentes dans une même table :

INSERT ALL
INTO table (colonne1, colonne2, , ,)
VALUES (liste de valeurs)
SELECT ....
FROM table1, table2, ,
WHERE....;

Si vous insérez des données provenant d'une feuille de calcul ou d'un fichier à séparation par virgules (csv), vous pouvez créer soit une table temporaire, soit une table externe, et charger les données à partir de celle-ci.

Une autre possibilité, toujours avec l’instruction INSERT portant sur plusieurs lignes, est la suivante :

INSERT INTO nom_table (colonne_1, colonne_2, ..., colonne_n)
SELECT valeur_1, valeur_2, ..., valeur_n
FROM ...

Vous pouvez également choisir d’insérer plusieurs lignes en une seule étape grâce à une autre variante de la syntaxe INSERT Oracle suivante :

INSERT ALL INTO matable (colonne1, colonne2, colonne3) VALUES ('val1.1', 'val1.2', 'val1.3') INTO matable (colonne1, colonne2, colonne3) VALUES ('val2.1', 'val2.2', 'val2.3') INTO matable (colonne1, colonne2, colonne3) VALUES ('val3.1', 'val3.2', 'val3.3') SELECT * FROM dual;

Enfin, vous pouvez également insérer plusieurs valeurs dans plusieurs tables en utilisant une commande telle que :

INSERT ALL INTO produit (id_produit,nom_produit) VALUES (1000, 'Disc') INTO produit (id_produit,nom_produit) VALUES (2000, 'Floppy') INTO clients (id_client, nom_client, ville) VALUES (999999, 'Anderson Construction', 'New York') SELECT * FROM dual;

Pour approfondir sur Base de données