如何使用带 OUT 参数的 SELECT 语句?
How to use SELECT statement with OUT parameters?
我正在尝试从 OUT game_name 参数中的游戏 table 获取游戏名称列,该参数使用 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;
$$
我想要 return 两个值:如果正在关注游戏以及游戏名称是什么,然后我会通过 API.
发回
这段代码看起来有点奇怪,但可以修复。您正在搜索 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
.
我正在尝试从 OUT game_name 参数中的游戏 table 获取游戏名称列,该参数使用 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;
$$
我想要 return 两个值:如果正在关注游戏以及游戏名称是什么,然后我会通过 API.
发回这段代码看起来有点奇怪,但可以修复。您正在搜索 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
.