sql >> データベース >  >> RDS >> Oracle

Oracleに複数の行を挿入する4つの方法

    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 ALLSELECTを組み合わせる ステートメント、および最後の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のドキュメントを参照してください。


    1. ER_NOT_SUPPORTED_AUTH_MODE-MySQLサーバー

    2. Oracle:タイムスタンプに分を追加する方法は?

    3. SQLiteはPRINTF()の名前をFORMAT()に変更します

    4. スライドデッキと#SQLintersectionのサンプル