我在很多地方看到过在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');
但是,在许多行的批量插入的情况下,假设我们正在执行单独的查询,那应该是高性能的吗?在这些多查询(网络,解析等)的情况下,经典的开销问题怎么样?
提前谢谢!!
答案 0 :(得分:2)
您可以使用INSERT ALL INTO
(Documentation)。
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来说,我可能会这样。