Oracle
 sql >> Database >  >> RDS >> Oracle

4 modi per inserire più righe in Oracle

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.