create table public.orders (
orderID serial PRIMARY KEY,
orderdate timestamp NOT NULL
);
create table public.orderdetails (
orderdetailID serial PRIMARY KEY,
orderID integer REFERENCES public.orders(orderID),
item varchar(20) NOT NULL,
quantity INTEGER NOT NULL
);
私は(上記のように非常に単純化された)テーブルを持っています。このテーブルには、注文の詳細と注文の詳細を1つのアクションで挿入します。Postgres 2つのテーブルに複数のレコードを挿入する機能
私は取引に精通していて、以下のようなSQLコマンドを使用してデータを挿入できます。しかし、理想的な私ではなく、機能可能であれば上記のようなクエリを持っているしたいと思います
DO $$
DECLARE inserted_id integer;
BEGIN
INSERT INTO public.orders(orderdate) VALUES (NOW()) RETURNING orderID INTO inserted_id;
INSERT INTO public.orderdetails(orderID, item, quantity)
VALUES (inserted_id, 'Red Widget', 10),
(inserted_id, 'Blue Widget', 5);
END
$$ LANGUAGE plpgsql;
私のアプリケーション内に格納されています。
postgres関数に複数のレコードを提供するという正しい方向に私を指摘できますか?あるいは、私がやろうとしていることが悪い習慣とみなされている場合は、私が他のどのルートに従うべきかを教えてください。
ありがとうございます。
この種の関係、なぜ 'orderdetails'テーブルの必要性? 1つのテーブルを使用し、トランザクションに問題はありません – ad4s
HI ad4s、 注文テーブルに注文日、出荷日、配送先住所などのものがありますが、orderdetailsテーブルには内訳があります注文したもののアイテムごとのアイテム。 – Devasta
おそらくこれは助けるかもしれないhttp://stackoverflow.com/questions/6822460/getting-an-id-inside-a-postgresql-transaction-block – ad4s