以下のクエリでは、実行時にエラー関数が返されます。結果の型はOUTパラメータのため整数にする必要があります。postgresqlの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;
"OUTパラメータまたはINOUTパラメータがある場合は、RETURNS句を省略することができます。存在する場合は、出力パラメータが示す結果タイプと一致する必要があります。複数の出力パラメータがある場合はRECORD、出力パラメータ._ " - [docより](https://www.postgresql.org/docs/current/static/sql-createfunction.html) – Abelisto