Se você usa DBMSs como MySQL ou SQL Server, a sintaxe para inserir várias linhas iem uma tabela com uma única instrução é bastante direta.
Mas se você usar o Oracle Database, precisará usar uma sintaxe diferente.
Opção 1:use um SELECT
Consulta
A primeira opção é usar um
SELECT
instrução para cada linha que precisa ser inserida: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;
Precisamos incluir
FROM dual
para cada linha, UNION ALL
para combinar cada SELECT
instrução, bem como o SELECT
final demonstração. Opção 2:use INSERT ALL
Outra opção é usar o
INSERT ALL
demonstração: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;
Certifique-se de incluir a última linha selecionando
dual
. Opção 3:use vários INSERT INTO
Declarações
Outra maneira de fazer isso é usar
INSERT INTO
declarações: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 );
Você pode achar que isso é muito mais lento do que os dois métodos anteriores se você tiver muitas linhas para inserir.
Opção 4:usar SQL*Loader
Se você tiver muitas linhas para inserir, e talvez se estiver fazendo isso regularmente, talvez queira dar uma olhada no SQL*Loader.
SQL*Loader é um utilitário que permite carregar dados de arquivos externos em tabelas do Oracle Database.
Usando os exemplos acima, o conteúdo do nosso arquivo de controle pode ser algo assim:
load data
infile 'products.csv'
into table Products
fields terminated by "," optionally enclosed by '"'
( ProductId, ProductName, Price )
Onde
products.csv
é o arquivo que contém todas as linhas a serem inseridas. E, em seguida, carregar os dados pode ser algo assim:
sqlldr <username> control=load_products.ctl
Onde
<username>
é nosso nome de usuário e load_products.ctl
é o nosso arquivo de controle. Consulte a documentação da Oracle para SQL*Loader para obter mais informações sobre como usá-lo.