在下面的查询中,当我执行它时会抛出一个错误函数,因为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;
答案 0 :(得分:2)
Postgres功能需要一些时间来适应。除了作为触发器和存储过程之外,它们处理返回值的方式也不同于其他语言。
实质上,OUT
参数表示函数返回的记录。没有单独的返回值的方法,因此void
是多余的。 。 。事实上,与OUT
参数不兼容。
解决方案很简单。只需删除RETURNS
子句:
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
) AS
$BODY$
. . .
除了没有定义i_prodid
之外,这相当于:
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
)
RETURNS integer AS
$BODY$
. . .
答案 1 :(得分:0)
通常我们使用OUT定义具有返回类型和过程的函数 参数。
如果您想定义功能,请尝试使用此
$('input[name*="payment"]').on('change', function() {
var type = this.value;
switch (type) {
case 'paypal':
$('#payment input').each(function() {
if ($(this).hasClass('required')) {
$(this).removeClass('required');
$(this).addClass('requiredFalse');
}
});
case 'creditcard':
$('#payment input').each(function() {
if ($(this).hasClass('requiredFalse')) {
$(this).addClass('required');
$(this).removeClass('requiredFalse');
}
});
}
});
或者,您可以将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 )
RETURNS integer AS
$BODY$
declare
i_prodid integer;
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;
i_prodid:=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 i_prodid;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
与PROCEDURE
参数
out
希望它有所帮助。