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.