Как использовать оператор SELECT с параметрами OUT? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь получить столбец названия игры из таблицы игр в параметре OUT game_name, который использует инструкцию SELECT. К сожалению, я получаю сообщение об ошибке рядом с «SELECT»:

CREATE OR REPLACE FUNCTION public.toggle(uid numeric, gid NUMERIC, OUT follow integer, OUT game_name TEXt)
    LANGUAGE plpgsql
AS $$
    BEGIN
perform FROM game_follows WHERE user_id = uid and game_id = gid;
    IF NOT FOUND THEN
        INSERT INTO game_follows(user_id, game_id) VALUES(uid, gid);
        follow := 1;
        game_name := SELECT name FROM games WHERE id = gid;

    ELSE
         DELETE FROM game_follows WHERE user_id = uid and game_id = gid;
        follow := 0;
        game_name := SELECT name FROM games WHERE id = gid;
    END IF;
    END;
$$

Я хотел бы, чтобы он возвращал два значения: если за игрой следуют и как называется игра, которую я затем отправлю обратно через API .

1 Ответ

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

Этот код выглядит немного странно, но его можно исправить. Вы ищете SELECT INTO

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;
  -- ANSI syntax
  game_name := (SELECT name FROM games WHERE id = gid);
  -- or Postgres/Oracle syntax
  SELECT name INTO game_name FROM games WHERE id = gid;
  -- Postgres syntax
  SELECT name FROM games WHERE id = gid INTO game_name;
END;

Переменная follow должна быть boolean. Тогда в коде должно быть follow := true else follow := false.

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