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 load_products.ctl
är vår kontrollfil.
Se Oracles dokumentation för SQL*Loader för mer information om hur du använder den.