Проверьте функцию с оператором IF в POSTGRESQL - PullRequest
1 голос
/ 10 января 2020

У меня есть 10 функций, все 10 возвращают «1», если функция не имеет ошибок, и «0», если функция имеет ошибки. Я хочу создать другую функцию, которая вызывает все эти функции и которая проверяет, возвращают ли функции 0 или 1. После этого я хочу запустить эту функцию в linux crontab и вывести функцию (некоторый текст из условий if) в go в файле журнала. Я не уверен, что смогу проверить эту функцию следующим образом. Спасибо за ваше время!

CREATE OR REPLACE FUNCTION public.test_al1()
    RETURNS text
    LANGUAGE 'plpgsql'
    COST 100 

AS $BODY$
DECLARE

BEGIN
    select public.test();
    if (select public.test()) = 1 then
        RAISE NOTICE 'No errors'
    else
        RAISE NOTICE 'Errors'
    end if;

END 
$BODY$;

1 Ответ

1 голос
/ 10 января 2020

Вы не нашли точку возврата для вашего запроса, а также пропало несколько ;. Я не совсем уверен, чего вы хотите достичь с помощью этой функции, поскольку вы объявили, что функция вернет TEXT, а оператора RETURN нет.

Один из вариантов - ничего не возвращать и использовать RAISE, как вы это делали - имейте в виду, что намерение RAISE (без INFO, EXCEPTION, et c.) один - скорее для сообщения об ошибках:

CREATE OR REPLACE FUNCTION public.test_al1() RETURNS VOID LANGUAGE plpgsql 
AS $BODY$
BEGIN 
  IF public.test() = 1 THEN
    RAISE 'Errors';
  ELSE
    RAISE 'No errors';
  END IF;
END 
$BODY$;

.. или в качестве альтернативы вы можете немного упростить его, возвращая сообщение как TEXT в предложении RETURN.

CREATE OR REPLACE FUNCTION public.test_al1() RETURNS TEXT LANGUAGE plpgsql 
AS $BODY$
DECLARE res TEXT DEFAULT 'No errors';
BEGIN 
  IF public.test() = 1 THEN
    res := 'Errors';
  END IF;
  RETURN res;
END 
$BODY$;

Дополнительная информация: CREATE FUNCTION

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...