Oracle
 sql >> Datenbank >  >> RDS >> Oracle

4 Möglichkeiten zum Einfügen mehrerer Zeilen in Oracle

Wenn Sie DBMS wie MySQL oder SQL Server verwenden, ist die Syntax zum Einfügen mehrerer Zeilen iin eine Tabelle mit einer einzigen Anweisung ganz einfach.

Wenn Sie jedoch Oracle Database verwenden, müssen Sie eine andere Syntax verwenden.

Option 1:Verwenden Sie ein SELECT Abfrage

Die erste Option ist die Verwendung eines SELECT Anweisung für jede einzufügende Zeile:

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;

Wir müssen FROM dual einfügen für jede Zeile UNION ALL um jedes SELECT zu kombinieren -Anweisung sowie das abschließende SELECT Aussage.

Option 2:Verwenden Sie INSERT ALL

Eine weitere Option ist die Verwendung von INSERT ALL Aussage:

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;

Stellen Sie sicher, dass Sie die letzte Zeile aus dual auswählen .

Option 3:Verwenden Sie mehrere INSERT INTO Aussagen

Eine andere Möglichkeit ist die Verwendung von INSERT INTO Anweisungen:

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 );

Möglicherweise stellen Sie fest, dass dies viel langsamer als die beiden vorherigen Methoden ausgeführt wird, wenn Sie viele Zeilen einfügen müssen.

Option 4:SQL*Loader verwenden

Wenn Sie viele Zeilen einfügen müssen und dies vielleicht regelmäßig tun, sollten Sie sich SQL*Loader ansehen.

SQL*Loader ist ein Dienstprogramm, mit dem Sie Daten aus externen Dateien in Oracle-Datenbanktabellen laden können.

Anhand der obigen Beispiele könnte der Inhalt unserer Steuerdatei etwa so aussehen:

load data
infile 'products.csv'
into table Products
fields terminated by "," optionally enclosed by '"'              
( ProductId, ProductName, Price )

Wobei products.csv ist die Datei, die alle einzufügenden Zeilen enthält.

Und dann könnte das Laden der Daten etwa so aussehen:

sqlldr <username> control=load_products.ctl

Wobei <username> ist unser Benutzername und load_products.ctl ist unsere Steuerdatei.

Weitere Informationen zur Verwendung finden Sie in der Oracle-Dokumentation für SQL*Loader.