Oracle SQL - 使用一个语句将多行插入表中?

时间:2012-04-17 19:01:17

标签: sql oracle insert

我想插入N行全部相同,但其中一个值不同。具体来说,这就是我想要的:

insert into attribute_list (id,value,name)
values 
(
select (id,'Y','is_leveled') from value_list where val >= 50
);

因此对于每个具有val> = 50的值,我会在attribute_list中插入一行。这可以通过一个insert语句完成,还是应该只在excel中手动生成这些插入?

(注意:这是一个简化的例子,以澄清问题,所以不需要攻击这个特定情况的不必要)

4 个答案:

答案 0 :(得分:26)

你绝对可以在一个声明中做到这一点!

试试这个:

INSERT INTO attribute_list (id, value, name)
SELECT id, 'Y', 'is_leveled'
FROM value_list WHERE val >= 50

答案 1 :(得分:5)

这就是FOR loops的用途。

DECLARE
   x NUMBER := 100;
BEGIN
   FOR i IN 1..10 LOOP
      IF MOD(i,2) = 0 THEN     -- i is even
         INSERT INTO temp VALUES (i, x, 'i is even');
      ELSE
         INSERT INTO temp VALUES (i, x, 'i is odd');
      END IF;
      x := x + 100;
   END LOOP;
   COMMIT;
END;

答案 2 :(得分:2)

您需要SELECT中的INSERT。为此,您应该省略VALUES,然后执行:

insert into attribute_list (id,value,name)
select (id,'Y','is_leveled') from value_list where val >= 50;

以下是一个示例:http://psoug.org/reference/insert.html

答案 3 :(得分:1)

如果您可以查询数据,则可以执行SELECT ... INTO。否则,要创建数据,您需要使用PL / SQL

如果您有数据,请尝试:

select id,'Y','is_leveled'
INTO attribute_list 
from value_list where val >= 50