18

我想插入 N 行都是相同的,除了其中一个值不同。具体来说,这就是我正在尝试的:

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

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

(注意:这是为了澄清问题而简化的熟化示例,因此无需攻击此特定案例的不必要性)

4

4 回答 4

33

你完全可以在一个语句中做到这一点!

尝试这个:

INSERT INTO attribute_list (id, value, name)
SELECT id, 'Y', 'is_leveled'
FROM value_list WHERE val >= 50
于 2012-04-17T19:04:23.807 回答
5

这就是FOR 循环的用途。

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;
于 2012-04-17T19:05:03.657 回答
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

于 2012-04-17T19:05:58.040 回答
1

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

如果您有数据,请尝试:

select id,'Y','is_leveled'
INTO attribute_list 
from value_list where val >= 50
于 2012-04-17T19:04:21.703 回答