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

2つのテーブルに複数のレコードを挿入するPostgres関数

    タプルの配列を使用して、関数に複数の行を渡すことができます。カスタムタイプが必要です:

    create type order_input as (
        item text,
        quantity integer);
    

    関数の引数には、このタイプの配列を使用してください:

    create or replace function insert_into_orders(order_input[])
    returns void language plpgsql as $$
    declare 
        inserted_id integer;
    begin
        insert into public.orders(orderdate) 
        values (now()) 
        returning orderid into inserted_id;
    
        insert into public.orderdetails(orderid, item, quantity)
        select inserted_id, item, quantity
        from unnest($1);
    end $$;
    

    使用法:

    select insert_into_orders(
        array[
            ('Red Widget', 10), 
            ('Blue Widget', 5)
        ]::order_input[]
    );
    
    select * from orderdetails;
    
     orderdetailid | orderid |    item     | quantity 
    ---------------+---------+-------------+----------
                 1 |       1 | Red Widget  |       10
                 2 |       1 | Blue Widget |        5
    (2 rows)
    


    1. MySQLテーブル->同じクエリで同じ行を複数回返すことができますか?

    2. MySQLで存在しないデータを選択する

    3. C ++コネクタでsetBlob()を使用してバイナリデータを設定する方法

    4. MySQL GROUP BY /ORDERBYの問題