在同一过程中使用查询的返回值

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;