Oracle SQL - вставить несколько строк в таблицу с одним выражением?

Я бы хотел вставить N строк, которые все одинаковы, кроме одного из значений. В частности, это то, что я пытаюсь:

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

Итак, для каждого значения, имеющего значение val >= 50, я вставляю одну строку в список атрибутов. Можно ли это сделать с помощью одной инструкции insert или просто вручную создать эти вставки в excel?

(обратите внимание: это упрощенный пример, упрощающий разъяснение проблемы, поэтому не нужно атаковать ненужность этого конкретного случая)

Ответы

Ответ 1

Вы можете абсолютно сделать это в одном заявлении!

Попробуйте следующее:

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

Ответ 2

Вот что Циклы 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;

Ответ 3

Вам нужен INSERT от SELECT. Для этого вы должны опустить 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

Ответ 4

Вы можете сделать SELECT ... INTO, если вы можете запросить данные. В противном случае для создания данных вам потребуется использовать PL/SQL

Если у вас есть данные, попробуйте:

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