在创建Postgres函数时出现了一个很小但令人讨厌的错误。
该函数在我的语言为 sql 时执行,但抛出语法错误
“选择”处或附近的语法错误 第14行:从x *
中选择*
当我将语言更改为plpgsql
时,因为我需要使用控制语句,所以我的语言必须是plpgsql而不是sql。
这是函数定义
-- FUNCTION: public."HHMD"()
DROP FUNCTION public."HHMD"();
CREATE OR REPLACE FUNCTION public."HHMD"(
)
RETURNS TABLE(changesets character varying)
LANGUAGE 'plpgsql'
COST 100
VOLATILE
ROWS 1000
AS $BODY$
Select * from x
$BODY$;
ALTER FUNCTION public."HHMD"()
OWNER TO lke_new;
COMMENT ON FUNCTION public."HHMD"()
IS 'work!';
答案 0 :(得分:0)
As documented in the manual PL / pgSQL函数至少需要一个BEGIN
和END
块。
要从PL / pgSQL函数中返回查询结果,您需要使用return query
所以您的函数应如下所示:
CREATE OR REPLACE FUNCTION public."HHMD"()
RETURNS TABLE(changesets character varying)
LANGUAGE plpgsql
COST 100
VOLATILE
ROWS 1000
AS $BODY$
BEGIN --<< this is missing
-- return the result of a query
return query
Select * from x;
END; --<< the corresponding END for the BEGIN
$BODY$;
无关,但是:
语言名称是一个标识符,您应该不用单引号引起来。改用language sql
或language plpgsql
。