sql >> Base de Datos >  >> RDS >> Oracle

4 formas de insertar varias filas en Oracle

Si usa DBMS como MySQL o SQL Server, la sintaxis para insertar múltiples filas in una tabla con una sola instrucción es bastante sencilla.

Pero si usa Oracle Database, necesitará usar una sintaxis diferente.

Opción 1:Usa un SELECT Consulta

La primera opción es usar un SELECT instrucción para cada fila que debe insertarse:

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;

Necesitamos incluir FROM dual para cada fila, UNION ALL para combinar cada SELECT instrucción, así como el SELECT final declaración.

Opción 2:Usar INSERT ALL

Otra opción es usar el INSERT ALL declaración:

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;

Asegúrese de incluir la última línea seleccionando de dual .

Opción 3:usar varios INSERT INTO Declaraciones

Otra forma de hacerlo es usar INSERT INTO declaraciones:

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

Puede encontrar que esto funciona mucho más lento que los dos métodos anteriores si tiene muchas filas para insertar.

Opción 4:Usar SQL*Loader

Si tiene muchas filas para insertar, y tal vez si lo hace regularmente, es posible que desee echar un vistazo a SQL*Loader.

SQL*Loader es una utilidad que le permite cargar datos de archivos externos en tablas de Oracle Database.

Usando los ejemplos anteriores, el contenido de nuestro archivo de control podría verse así:

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

Donde products.csv es el archivo que contiene todas las filas a insertar.

Y luego cargar los datos podría verse así:

sqlldr <username> control=load_products.ctl

Donde <username> es nuestro nombre de usuario y load_products.ctl es nuestro archivo de control.

Consulte la documentación de Oracle para SQL*Loader para obtener más información sobre cómo usarlo.