Oracle
 sql >> Base de données >  >> RDS >> Oracle

4 façons d'insérer plusieurs lignes dans Oracle

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 )

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

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