在同一过程中使用查询的返回值
Use returned values from a query in the same procedure
我对 pgpsql 很陌生。我有两个 tables - product 和 product_category - 具有一对多关系。我正在创建一个程序,用于在类别 table 中插入一个值(如果它不存在)并且我想使用该类别的 ID 来插入产品。
我试过为第一个插入使用别名,然后返回 id 值,这样我就可以 select 它,但是我得到了一个错误。
在 pgpsql 的相同过程中使用返回值的正确方法是什么?
CREATE OR REPLACE PROCEDURE insert_product(name VARCHAR, category VARCHAR)
LANGUAGE plpgsql
as $$
BEGIN
WITH ins_category AS(
INSERT INTO product_category(name)
VALUES('laptops')
ON CONFLICT (name) DO NOTHING
RETURNING id
)
INSERT INTO product(name, category)
VALUES(name, ins_category.id); // HERE IS THE ERROR
COMMIT;
END;
$$
使用 SELECT
而不是 VALUES
。
WITH ins_category
AS
(
...
)
INSERT INTO product (name,
category)
SELECT name,
ins_category.id
FROM ins_category;
我对 pgpsql 很陌生。我有两个 tables - product 和 product_category - 具有一对多关系。我正在创建一个程序,用于在类别 table 中插入一个值(如果它不存在)并且我想使用该类别的 ID 来插入产品。
我试过为第一个插入使用别名,然后返回 id 值,这样我就可以 select 它,但是我得到了一个错误。
在 pgpsql 的相同过程中使用返回值的正确方法是什么?
CREATE OR REPLACE PROCEDURE insert_product(name VARCHAR, category VARCHAR)
LANGUAGE plpgsql
as $$
BEGIN
WITH ins_category AS(
INSERT INTO product_category(name)
VALUES('laptops')
ON CONFLICT (name) DO NOTHING
RETURNING id
)
INSERT INTO product(name, category)
VALUES(name, ins_category.id); // HERE IS THE ERROR
COMMIT;
END;
$$
使用 SELECT
而不是 VALUES
。
WITH ins_category
AS
(
...
)
INSERT INTO product (name,
category)
SELECT name,
ins_category.id
FROM ins_category;