插入多行

时间:2016-12-01 19:18:51

标签: sql oracle11g

我在很多地方看到过在Oracle中插入多行的好方法如下:

INSERT INTO mytable ("id", "name") VALUES ('val1', 'val2');
INSERT INTO mytable ("id", "name") VALUES ('aa', 'cc');
INSERT INTO mytable ("id", "name") VALUES ('ww', 'dd');

但是,在许多行的批量插入的情况下,假设我们正在执行单独的查询,那应该是高性能的吗?在这些多查询(网络,解析等)的情况下,经典的开销问题怎么样?

提前谢谢!!

3 个答案:

答案 0 :(得分:2)

您可以使用INSERT ALL INTODocumentation)。

INSERT ALL 
  INTO mytable ("id", "name") VALUES ('val1', 'val2')
  INTO mytable ("id", "name") VALUES ('aa', 'cc')
  INTO mytable ("id", "name") VALUES ('aa', 'cc')
SELECT 1 FROM DUAL;

答案 1 :(得分:1)

这确实是一种插入表格的低效方式。您说明的确切陈述可以替换为

INSERT INTO mytable ("id", "name") 
  select 'val1', 'val2' from dual union all
  select 'aa'  , 'cc'   from dual union all
  select 'ww'  , 'dd'   from dual
;

当然,如果您的表有两列以上,其他列将是null(或列的默认值,如果这样定义的话)。

更好的是,您插入的值已经存在于某种表中 - 然后您可以使用单个SELECT语句,可能使用WHERE条件,连接等。

答案 2 :(得分:0)

如果你已经在一些SQL对象中有dada,你可以插入一个Select, 但是当存在插入大量信息的需要时我们可以使用其他方法,如发送txt文件并进行批量插入,此时有100,000行纯文本(2016)对于1gb网络来说并不是太多了问题

检查一下:

Use a Format File to Bulk Import Data (SQL Server)

Bulk Import and Export of Data (SQL Server)

选择插入的示例:

Insert into Table
select id, column1, column2 from tempTable

比它更快   INTO mytable(“id”,“name”)VALUES('val1','val2')   INTO mytable(“id”,“name”)VALUES('aa','cc')   INTO mytable(“id”,“name”)VALUES('aa','cc')

请注意!!!!!!

SORRY !!!你在询问ORACLE ......对于ORACLE来说,我可能会这样。