sql >> Databasteknik >  >> RDS >> Oracle

4 sätt att infoga flera rader i Oracle

Om du använder DBMS som MySQL eller SQL Server är syntaxen för att infoga flera rader in i en tabell med en enda sats ganska enkel.

Men om du använder Oracle Database måste du använda en annan syntax.

Alternativ 1:Använd en SELECT Fråga

Det första alternativet är att använda en SELECT uttalande för varje rad som behöver infogas:

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;

Vi måste inkludera FROM dual för varje rad, UNION ALL för att kombinera varje SELECT satsen, såväl som den sista SELECT uttalande.

Alternativ 2:Använd INSERT ALL

Ett annat alternativ är att använda INSERT ALL uttalande:

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;

Var noga med att inkludera den sista raden från dual .

Alternativ 3:Använd flera INSERT INTO Uttalanden

Ett annat sätt att göra det är att använda INSERT INTO uttalanden:

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

Du kanske upptäcker att detta går mycket långsammare än de två föregående metoderna om du har många rader att infoga.

Alternativ 4:Använd SQL*Loader

Om du har många rader att infoga, och kanske om du gör det regelbundet, kanske du vill ta en titt på SQL*Loader.

SQL*Loader är ett verktyg som gör att du kan ladda data från externa filer till Oracle Database-tabeller.

Med exemplen ovan kan innehållet i vår kontrollfil se ut ungefär så här:

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

Där products.csv är filen som innehåller alla rader som ska infogas.

Och sedan kan laddning av data se ut ungefär så här:

sqlldr <username> control=load_products.ctl

Där är vårt användarnamn och load_products.ctl är vår kontrollfil.

Se Oracles dokumentation för SQL*Loader för mer information om hur du använder den.


  1. Komma igång med Oracle SQL Developer på Windows

  2. Skapa PostgreSQL-databas i farten med Hibernate även om DB inte finns

  3. Jämför DBaaS Failover-lösningar med manuella återställningsinställningar

  4. MySQL-servern har försvunnit - på exakt 60 sekunder