Возвращение таблицы с указанными c параметрами из функции PostgreSQL - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть эта функция, с которой я хотел бы вернуть таблицу, которая содержит два столбца: game_name и follow (это будет целое число 0 или 1):

CREATE OR REPLACE FUNCTION public.toggle2(uid numeric, gid NUMERIC)
    RETURNS TABLE (
        follow INT,
        game_name TEXT
    )
    LANGUAGE plpgsql
AS $$
    BEGIN
        IF NOT EXISTS(SELECT * 
                  FROM game_follows 
                 WHERE user_id = uid and game_id = gid)
                 THEN
    INSERT INTO game_follows(user_id, game_id) VALUES(uid, gid);
    follow := 1;
  ELSE
     DELETE FROM game_follows WHERE user_id = uid and game_id = gid;
     follow := 0;
  END IF;
 SELECT name INTO game_name FROM games WHERE id = gid;
    END;
$$
;

К сожалению, функция возвращает пустые значения. Я использую это так:

SELECT * FROM toggle2(83, 12);

1 Ответ

0 голосов
/ 07 апреля 2020

Функция, объявленная для RETURN TABLE, может возвращать 0-n строк .
Вы должны активно вернуть строк, иначе ничего не будет возвращено ( без ряда). Один из способов сделать это:

RETURN NEXT; -- as last line before END;

Есть и другие способы, см. Руководство.

Однако , похоже, вы хотите вернуться ровно одна строка каждый раз. Так что вместо используйте OUT параметры:

CREATE OR REPLACE FUNCTION public toggle2(uid numeric, gid numeric, OUT follow int, OUT game_name text) AS ...

Тогда достаточно назначить эти OUT параметры, они автоматически возвращаются в одну строку результатов.

См .:

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