Si vous utilisez des SGBD tels que MySQL ou SQL Server, la syntaxe pour insérer plusieurs lignes dans une table avec une seule instruction est assez simple.
Mais si vous utilisez Oracle Database, vous devrez utiliser une syntaxe différente.
Option 1 :Utiliser un SELECT
Requête
La première option consiste à utiliser un SELECT
instruction pour chaque ligne à insérer :
INSERT INTO Products (ProductId, ProductName, Price)
WITH p AS (
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup (4 pack)', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
)
SELECT * FROM p;
Nous devons inclure FROM dual
pour chaque ligne, UNION ALL
pour combiner chaque SELECT
déclaration, ainsi que le dernier SELECT
déclaration.
Option 2 :Utilisez INSERT ALL
Une autre option consiste à utiliser le INSERT ALL
déclaration :
INSERT ALL
INTO Products ( ProductId, ProductName, Price ) VALUES ( 1, 'Left Handed Screwdriver', 10.50 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 2, 'Right Handed Screwdriver', 22.75 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 3, 'Bottomless Coffee Cup (4 pack)', 15.00 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 4, 'Urban Dictionary Version 2.3', 75 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 5, 'Beer Water', 15 )
SELECT 1 FROM dual;
Assurez-vous d'inclure la dernière ligne en sélectionnant parmi dual
.
Option 3 :Utiliser plusieurs INSERT INTO
Déclarations
Une autre façon de le faire est d'utiliser INSERT INTO
déclarations :
INSERT INTO Products VALUES ( 1, 'Left Handed Screwdriver', 10.50 );
INSERT INTO Products VALUES ( 2, 'Right Handed Screwdriver', 22.75 );
INSERT INTO Products VALUES ( 3, 'Bottomless Coffee Cup (4 pack)', 15.00 );
INSERT INTO Products VALUES ( 4, 'Urban Dictionary Version 2.3', 75 );
INSERT INTO Products VALUES ( 5, 'Beer Water', 15 );
Vous constaterez peut-être que cela s'exécute beaucoup plus lentement que les deux méthodes précédentes si vous avez beaucoup de lignes à insérer.
Option 4 :Utiliser SQL*Loader
Si vous avez beaucoup de lignes à insérer, et peut-être si vous le faites régulièrement, vous voudrez peut-être jeter un œil à SQL*Loader.
SQL*Loader est un utilitaire qui vous permet de charger des données à partir de fichiers externes dans des tables de base de données Oracle.
En utilisant les exemples ci-dessus, le contenu de notre fichier de contrôle pourrait ressembler à ceci :
load data
infile 'products.csv'
into table Products
fields terminated by "," optionally enclosed by '"'
( ProductId, ProductName, Price )
Où products.csv
est le fichier qui contient toutes les lignes à insérer.
Ensuite, le chargement des données pourrait ressembler à ceci :
sqlldr <username> control=load_products.ctl
Où <username>
est notre nom d'utilisateur et load_products.ctl
est notre fichier de contrôle.
Consultez la documentation d'Oracle pour SQL*Loader pour plus d'informations sur son utilisation.