2010-11-11 50 views
5

是否可以使用一个插入语句在表中插入多个行? 我知道如果我这样做会出现这种情况:使用一个插入命令插入多行

insert into table (fields) select values from another_table 

但是如果我想插入:

row 1 - (a1, b1, c1) 
row 2 - (a2, b2, c2) 
... 
row n - (an, bn, cn) 

只用一个INSERT命令?

回答

7

两种解决方案(来源:http://appsfr.free.fr/spip.php?article21):

INSERT ALL 
INTO table (column1, column2) 
VALUES (value1, value2) 
INTO table (column1, column2) 
VALUES (value1, value2) 
...etc... 
SELECT * FROM DUAL ; 

INSERT INTO table (column1, column2) 
SELECT value1, value2 FROM DUAL UNION ALL 
SELECT value1, value2 FROM DUAL UNION ALL 
...etc... 
SELECT value1, value2 FROM DUAL ; 
-5

不,这是不可能的。正如你自己已经说过的那样,它只能通过select子句提供插入值和行。

+0

这是绝对有可能。 – rwilliams 2010-11-11 07:01:27

+0

至少在阅读了接受的答案以及其他一些给定的答案之后,你现在肯定知道这是可能的。 – 2015-12-22 06:20:00

5

Insert All

INSERT ALL 
    INTO mytable (column1, column2, column3) VALUES ('val1.1', 'val1.2', 'val1.3') 
    INTO mytable (column1, column2, column3) VALUES ('val2.1', 'val2.2', 'val2.3') 
    INTO mytable (column1, column2, column3) VALUES ('val3.1', 'val3.2', 'val3.3') 
SELECT * FROM dual; 
4
INSERT INTO products (product_no, name, price) VALUES 
    (1, 'Cheese', 9.99), 
    (2, 'Bread', 1.99), 
    (3, 'Milk', 2.99); 
+0

问题是为了oracle,所以你为什么要发布PostgreSQL的答案? – Taryn 2012-09-21 20:32:55

+0

我在我的答案中删除了'PostgreSQL'。为了您的信息,这是标准的SQL-92。 – 2012-09-24 18:14:45

+0

根据OP的要求,这不适用于Oracle。 – 2014-04-14 03:00:36