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

4 måder at indsætte flere rækker på i Oracle

Hvis du bruger DBMS'er såsom MySQL eller SQL Server, er syntaksen for at indsætte flere rækker in i en tabel med en enkelt sætning ret ligetil.

Men hvis du bruger Oracle Database, skal du bruge en anden syntaks.

Mulighed 1:Brug en SELECT Forespørgsel

Den første mulighed er at bruge en SELECT erklæring for hver række, der skal indsættes:

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 skal inkludere FROM dual for hver række, UNION ALL for at kombinere hver SELECT sætning, samt den endelige SELECT erklæring.

Mulighed 2:Brug INSERT ALL

En anden mulighed er at bruge INSERT ALL erklæring:

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;

Sørg for at inkludere den sidste linje, der vælger fra dobbelt .

Mulighed 3:Brug flere INSERT INTO Erklæringer

En anden måde at gøre det på er at bruge INSERT INTO udsagn:

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 vil muligvis opleve, at dette kører meget langsommere end de to foregående metoder, hvis du har mange rækker at indsætte.

Mulighed 4:Brug SQL*Loader

Hvis du har mange rækker at indsætte, og måske hvis du gør det regelmæssigt, kan du tage et kig på SQL*Loader.

SQL*Loader er et værktøj, der giver dig mulighed for at indlæse data fra eksterne filer til Oracle Database-tabeller.

Ved at bruge ovenstående eksempler kan indholdet af vores kontrolfil se nogenlunde sådan ud:

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

Hvor products.csv er den fil, der indeholder alle de rækker, der skal indsættes.

Og så kan indlæsning af data se sådan ud:

sqlldr <username> control=load_products.ctl

Hvor er vores brugernavn og load_products.ctl er vores kontrolfil.

Se Oracles dokumentation for SQL*Loader for mere information om, hvordan du bruger det.


  1. Hvordan fejlfinder man ORA-01775:looping kæde af synonymer?

  2. Konverter NULL-værdier til kolonnens standardværdi ved indsættelse af data i SQLite

  3. Oracle Bulk Collect-eksempel ved hjælp af Cursor Rowtype Type Object

  4. Sådan bruges STRCMP() til at sammenligne 2 strenge i MySQL