在下面的查询中,当我执行它抛出一个错误函数,结果类型必须是integer
,因为OUT
参数。请任何人帮助我克服这个问题。
CREATE OR REPLACE FUNCTION funinsertupdateproduct(i_productid integer, t_productname text, t_productdesc text, i_brandid integer, i_varianceid integer, i_packsizeid integer, i_clientid integer, i_userid integer,out i_prodid integer )
RETURNS void AS
$BODY$
BEGIN
IF EXISTS (SELECT 1 FROM "product" WHERE product_id = i_productid) THEN
UPDATE "product" SET "product_name" = t_productname, "product_desc" = t_productdesc, "brand_id"=i_brandid,variance_id=i_varianceid,pack_size_id=i_packsizeid WHERE product_id = i_productid;
ELSE
INSERT INTO "product"("product_name", "product_desc", "create_by","client_id",variance_id,brand_id,pack_size_id ) VALUES ( t_productname, t_productdesc,i_userid,i_clientid,i_varianceid,i_brandid,i_packsizeid) returning product_id INTO i_prodid;
END IF;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION funinsertupdateproduct(integer, text, text, integer, integer, integer, integer, integer,integer) OWNER TO postgres;
字符串
3条答案
按热度按时间s5a0g9ez1#
Postgres函数需要一些时间来适应。除了触发器和存储过程之外,它们处理返回值的方式与其他语言不同。
本质上,
OUT
参数表示函数返回的记录。没有单独的方法返回值,所以void
是多余的.而且,事实上,与OUT
参数不兼容。解决方案很简单,只需删除
RETURNS
子句:字符串
除了没有定义
i_prodid
之外,这相当于:型
gv8xihay2#
通常我们用返回类型定义函数,用OUT参数定义过程。
如果你想定义函数,试试这个
字符串
或者,您可以使用
PROCEDURE
和out
参数型
希望对你有帮助。
imzjd6km3#
我得到了下面相同的错误。* 下面的错误发生在PL/pgSQL function和SQL function:
错误:由于OUT参数,函数结果类型必须为整数
因为
OUT
参数(INTEGER
)和RETURNS <type>
子句(VOID
)在PL/pgSQL函数中的类型不一样,如下所示:字符串
因此,我将
INTEGER
设置为RETURNS <type>
子句,如下所示,然后错误就解决了:型
或者,我取消了
RETURNS <type>
子句,如下所示,然后错误就解决了:型