代码之家  ›  专栏  ›  技术社区  ›  Laveena

使用plpgsql语言创建Postgres函数时出现简单语法错误

  •  0
  • Laveena  · 技术社区  · 8 年前

    我在创建Postgres函数时遇到了一个非常小但令人恼火的错误。

    当我的语言是 sql语句 但是抛出一个语法错误

    “Select”处或附近的语法错误

    当我把语言改成 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 回复  |  直到 8 年前
        1
  •  0
  •   a_horse_with_no_name    8 年前

    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

    推荐文章