sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres Funktion för att infoga flera poster i två tabeller

Du kan använda en array av tupler för att skicka flera rader till funktionen. Du behöver en anpassad typ:

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

Använd array av denna typ för ett argument för funktionen:

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 $$;

Användning:

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. Returnera Oracle-kolumnnamn i formatet table.column?

  2. Knex ansluta till Heroku Postgres får fel?

  3. Implementering av SQL Server Performance Indicator för frågor, lagrade procedurer och triggers

  4. Prestanda för att söka igenom 100 miljoner skivor