CREATE OR REPLACE FUNCTION "public"."sxfun"("jcbh" text)
RETURNS "pg_catalog"."int4" AS $BODY$
declare leftplayer TEXT;
declare rightplayer TEXT;
declare leftcoin int;
BEGIN
SELECT player1 into leftplayer,player2 into rightplayer FROM table1 WHERE id=$1;
SELECT SUM(playcoin) into leftcoin FROM table2 WHERE playname=leftplayer
COMMIT;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
该代码语法错误,请解决该问题,请
您缺少返回声明。在PL / pgSQL中,declare
启动一个块,不需要为每个变量重复该关键字。而且您不能提交函数-并且您不需要它开始。
如手册中所述,您需要用于return
从函数返回值。
要将多列存储到多个变量中,您需要用逗号分隔它们,而不是重复该INTO
子句。
请注意,sum()
返回的是bigint,因此您的变量和返回类型也应定义为bigint。
CREATE OR REPLACE FUNCTION public.sxfun(jcbh text)
RETURNS bigint
AS
$BODY$
declare
leftplayer TEXT;
rightplayer TEXT;
leftcoin bigint;
BEGIN
SELECT player1, player2
into leftplayer, rightplayer
FROM table1
WHERE id = jcbh;
SELECT SUM(playcoin)
into leftcoin
FROM table2
WHERE playname = leftplayer;
return leftcoin; --<< return the value
END
$BODY$
LANGUAGE plpgsql;
如果id
是数字(名称通常表示),则该参数jcbh
应声明为integer
,而不是text
。
请注意,您可以将其简化为单个语句。不需要中间变量:
CREATE OR REPLACE FUNCTION public.sxfun(jcbh text)
RETURNS bigint
AS
$BODY$
SELECT SUM(playcoin)
FROM table2
WHERE playname IN (select leftplayer
FROM table1
WHERE id = jcbh);
$BODY$
LANGUAGE sql;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句