Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

4 maneiras de inserir várias linhas no Oracle


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.