【发布时间】:2020-11-08 21:17:32
【问题描述】:
我有一个插入、更新或删除表行的存储过程。当所有参数都用作输入时,它工作正常。但是,我需要返回最后插入行的 ID。为此,我尝试在INSERT 语句之后使用INOUT 参数和RETURNING 来返回ID。
但是,我不确定如何将返回的 ID 绑定到 INOUT 参数。以下是存储过程的代码:
CREATE OR REPLACE PROCEDURE public.spproductinsertupdatedelete(
_ser integer,
_subcategid integer,
_inrprice numeric,
_usdprice numeric,
_colour integer,
_size integer,
_qty integer,
_prodid integer DEFAULT NULL::integer,
inout _pid integer default null
)
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
if _ser=1 then --- Insert
INSERT INTO product (prod_subcateg_id,prod_inr_price,prod_usd_price,prod_colour,prod_size,prod_qty)
VALUES (_subcategID, _inrprice, _usdprice, _colour, _size, _qty)
RETURNING prod_id;
ELSEIF _ser=2 THEN
UPDATE PRODUCT SET
prod_subcateg_id = _subcategid,
prod_inr_price = _inrprice,
prod_usd_price = _usdprice,
prod_size = _size,
prod_colour = _colour,
prod_qty=_qty
where prod_id = _prodID;
ELSEIF _ser=3 THEN ---- Delete
UPDATE PRODUCT SET prod_datetill = now()
WHERE prod_id = _prodID;
end if;
END
$BODY$;
在执行上述存储过程时,我收到此错误:
ERROR: query has no destination for result data
【问题讨论】:
-
您可能想使用
_pid = INSERT …? -
不能使用 OUT,必须使用 INOUT:SP "参数的模式:IN、INOUT 或 VARIADIC。如果省略,则默认为 IN。(OUT 参数为目前不支持过程。请改用 INOUT。)"
-
如果你想返回一些东西,使用一个函数
标签: postgresql stored-procedures parameter-passing plpgsql