MySQLやSQLServerなどのDBMSを使用する場合、1つのステートメントでテーブルに複数の行を挿入するための構文は非常に簡単です。
ただし、Oracle Databaseを使用する場合は、別の構文を使用する必要があります。
オプション1:SELECT
を使用する クエリ
最初のオプションは、SELECT
を使用することです 挿入する必要のある各行のステートメント:
INSERT INTO Products (ProductId, ProductName, Price)
WITH p AS (
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup (4 pack)', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
)
SELECT * FROM p;
FROM dual
を含める必要があります 各行について、UNION ALL
各SELECT
を組み合わせる ステートメント、および最後のSELECT
ステートメント。
オプション2:INSERT ALL
を使用する
もう1つのオプションは、INSERT ALL
を使用することです。 ステートメント:
INSERT ALL
INTO Products ( ProductId, ProductName, Price ) VALUES ( 1, 'Left Handed Screwdriver', 10.50 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 2, 'Right Handed Screwdriver', 22.75 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 3, 'Bottomless Coffee Cup (4 pack)', 15.00 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 4, 'Urban Dictionary Version 2.3', 75 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 5, 'Beer Water', 15 )
SELECT 1 FROM dual;
dual
から選択した最後の行を必ず含めてください 。
オプション3:複数のINSERT INTO
を使用する ステートメント
これを行う別の方法は、INSERT INTO
を使用することです。 ステートメント:
INSERT INTO Products VALUES ( 1, 'Left Handed Screwdriver', 10.50 );
INSERT INTO Products VALUES ( 2, 'Right Handed Screwdriver', 22.75 );
INSERT INTO Products VALUES ( 3, 'Bottomless Coffee Cup (4 pack)', 15.00 );
INSERT INTO Products VALUES ( 4, 'Urban Dictionary Version 2.3', 75 );
INSERT INTO Products VALUES ( 5, 'Beer Water', 15 );
挿入する行が多い場合、これは前の2つの方法よりも実行速度が大幅に遅くなることがあります。
オプション4:SQL*ローダーを使用
挿入する行がたくさんある場合、およびおそらく定期的に実行している場合は、SQL*Loaderを確認することをお勧めします。
SQL * Loaderは、外部ファイルからOracleデータベーステーブルにデータをロードできるようにするユーティリティです。
上記の例を使用すると、制御ファイルの内容は次のようになります。
load data
infile 'products.csv'
into table Products
fields terminated by "," optionally enclosed by '"'
( ProductId, ProductName, Price )
products.csv
の場所 挿入するすべての行を含むファイルです。
そして、データのロードは次のようになります。
sqlldr <username> control=load_products.ctl
<username>
の場所 はユーザー名であり、load_products.ctl
は私たちの制御ファイルです。
使用方法の詳細については、SQL*Loaderに関するOracleのドキュメントを参照してください。