【问题标题】:Simple Syntax error creating Postgres function with language plpgsql使用语言 plpgsql 创建 Postgres 函数的简单语法错误
【发布时间】:2018-10-01 13:34:01
【问题描述】:

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

【问题讨论】:

    标签: postgresql function plpgsql


    【解决方案1】:

    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

    【讨论】:

    • 单引号由 pgadmin4 中的 NEW FUNCTION UI 生成
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多