web-dev-qa-db-ja.com

Oracle SQL-1つのステートメントでテーブルに複数の行を挿入しますか?

値の1つが異なることを除いて、すべて同一のN行を挿入したいと思います。具体的には、これは私が試していることです:

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

したがって、val> = 50のすべての値について、1つの行をattribute_listに挿入します。これは1つの挿入ステートメントで実行できますか、またはこれらの挿入をExcelで手動で生成する必要がありますか?

(注:これは問題を明確にするために簡略化された調理済みの例であるため、この特定のケースの不要な部分を攻撃する必要はありません)

17
Jeremy

これは1つのステートメントで完全に実行できます。

これを試して:

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

それが 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;
5
nes1983

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

2
Pavel Veller

SELECT ... INTOデータをクエリできる場合。それ以外の場合は、PL/SQLを使用する必要があるデータを作成します

データがある場合は、以下を試してください。

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