使用语言plpgsql创建Postgres函数的简单语法错误

时间:2018-10-01 13:34:01

标签: postgresql function plpgsql

在创建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!';

1 个答案:

答案 0 :(得分:0)

As documented in the manual PL / pgSQL函数至少需要一个BEGINEND块。

要从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 sqllanguage plpgsql