Ошибка простого синтаксиса при создании функции Postgres с языком plpgsql - PullRequest
0 голосов
/ 01 октября 2018

Я получаю очень маленькую, но раздражающую ошибку при создании функции Postgres.

Функция запускается, когда мой язык sql , но выдает синтаксическую ошибку

Синтаксическая ошибка на или около "Select" LINE 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 голосов
/ 01 октября 2018

Как указано в руководстве для функции PL / pgSQL требуется (как минимум) блок BEGIN и END.

Чтобы вернуть результат запроса из функции PL / pgSQL, вам нужно использовать запрос возврата

Таким образом, ваша функция должна выглядеть следующим образом:

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.

...