2016-10-25 12 views

答えて

1

はい、簡単な方法があります。ここでは万行を生成する簡単な例だと(デュアル、このケースでは)既存のテーブルから単一の行にそれを結ぶ横断:

WITH dummy AS (SELECT LEVEL lvl 
       FROM dual 
       CONNECT BY LEVEL <= 1000) 
SELECT sd.col1, -- replace with your column list that you want to insert into the table 
     ROWNUM pk -- replace with the sequence used to generate the pk, e.g.: pk_seq.nextval 
FROM (SELECT 'abc' col1 FROM dual) sd -- replace with your 1 row selected from your table 
     CROSS JOIN dummy 
     CROSS JOIN dummy; 

COL1   PK 
---- ---------- 
abc   1 
abc   2 
abc   3 
abc   4 
... 

だからあなたのinsert文のようなものになります。

insert into your_table (pk_col, col1, col2, col3, ...) 
WITH dummy AS (SELECT LEVEL lvl 
       FROM dual 
       CONNECT BY LEVEL <= 1000) 
SELECT your_table_pk_seq.nextval pk_col, 
     yt.col1, 
     yt.col2, 
     yt.col3, 
     ... 
FROM your_table yt 
     CROSS JOIN dummy 
     CROSS JOIN dummy; 

これは、プライマリキーの列値を生成するシーケンスを持っていることを前提としています。

これは奇妙な要件ですが、テストデータの作成に使用している場合を除きます。この場合、より現実的なデータを作成するために、他の列の一部を変更してください。

+0

N.B.レベルが<= 1000000の単一のダミー・サブクエリを使用できますが、少数の行を生成してクロス・ジョインする方が高速になります。 – Boneist

+0

私はpl SQLの新しいですので、親切に私にクエリの実行を説明することができますか? – Maharajaparaman

+0

これはPL/SQLではありませんが、これは単純なSQLです。 SQLに精通していない場合は、[概念のマニュアルのSQL](https://docs.oracle.com/cd/E11882_01/server.112/e40540/sqllangu.htm#CNCPT1734)を読むことを強くお勧めします。私があなたに与えたクエリは、「ダミー」と呼ばれるサブクエリ(WITH句で定義されているサブクエリ、別名データベースを別のデータベースプラットフォームで使用するサブクエリ、Common Table Expressions(CTE)サブクエリ内のすべての行にサブクエリのすべての行が結合されるため、1000 x 1000行になります)。 – Boneist

関連する問題