Se utilizzi DBMS come MySQL o SQL Server, la sintassi per inserire più righe iin una tabella con una singola istruzione è abbastanza semplice.
Ma se utilizzi Oracle Database, dovrai utilizzare una sintassi diversa.
Opzione 1:usa un SELECT
Interroga
La prima opzione è usare un SELECT
istruzione per ogni riga da inserire:
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;
Dobbiamo includere FROM dual
per ogni riga, UNION ALL
per combinare ogni SELECT
istruzione, nonché l'ultimo SELECT
dichiarazione.
Opzione 2:usa INSERT ALL
Un'altra opzione è usare il INSERT ALL
dichiarazione:
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;
Assicurati di includere l'ultima riga selezionando da dual
.
Opzione 3:usa più INSERT INTO
Dichiarazioni
Un altro modo per farlo è usare INSERT INTO
dichiarazioni:
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 );
Potresti scoprire che questo è molto più lento dei due metodi precedenti se hai molte righe da inserire.
Opzione 4:usa SQL*Loader
Se hai molte righe da inserire, e forse se lo fai regolarmente, potresti voler dare un'occhiata a SQL*Loader.
SQL*Loader è un'utilità che consente di caricare dati da file esterni nelle tabelle di Oracle Database.
Utilizzando gli esempi precedenti, il contenuto del nostro file di controllo potrebbe assomigliare a questo:
load data
infile 'products.csv'
into table Products
fields terminated by "," optionally enclosed by '"'
( ProductId, ProductName, Price )
Dove products.csv
è il file che contiene tutte le righe da inserire.
E quindi il caricamento dei dati potrebbe essere simile a questo:
sqlldr <username> control=load_products.ctl
Dove <username>
è il nostro nome utente e load_products.ctl
è il nostro file di controllo.
Consulta la documentazione di Oracle per SQL*Loader per ulteriori informazioni su come utilizzarlo.