1
PKをインクリメントするだけで、既存のレコードを1つ使用してテーブルに100万レコードを挿入する必要があります。それを行う簡単な方法はありますか?Pkをインクリメントして歌レコードを使用してテーブルに複数のレコードを挿入する
PKをインクリメントするだけで、既存のレコードを1つ使用してテーブルに100万レコードを挿入する必要があります。それを行う簡単な方法はありますか?Pkをインクリメントして歌レコードを使用してテーブルに複数のレコードを挿入する
はい、簡単な方法があります。ここでは万行を生成する簡単な例だと(デュアル、このケースでは)既存のテーブルから単一の行にそれを結ぶ横断:
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;
を
これは、プライマリキーの列値を生成するシーケンスを持っていることを前提としています。
これは奇妙な要件ですが、テストデータの作成に使用している場合を除きます。この場合、より現実的なデータを作成するために、他の列の一部を変更してください。
N.B.レベルが<= 1000000の単一のダミー・サブクエリを使用できますが、少数の行を生成してクロス・ジョインする方が高速になります。 – Boneist
私はpl SQLの新しいですので、親切に私にクエリの実行を説明することができますか? – Maharajaparaman
これは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