【发布时间】:2020-04-06 21:08:41
【问题描述】:
我有这个函数,我想用它返回一个包含两列的表: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);
【问题讨论】:
-
请始终公开您的 Postgres 版本。也是最有帮助的:显示数据类型和约束的表定义(
CREATE TABLE语句)。最重要的是,(user_id, game_id)上是否有UNIQUE约束或索引?并发写访问是可能的吗?
标签: sql postgresql plpgsql return-type