我想知道动态确定要调用的存储过程的语法是什么。
这是我的存储过程:
CREATE OR REPLACE FUNCTION "CalculateTotalPoints"(
"@player_id" UUID
)
RETURNS FLOAT AS
$func$
DECLARE "@total" FLOAT;
BEGIN
SELECT
SUM(
(CASE WHEN p.league = 'MLB' THEN
SELECT * FROM "CalculateMLBPoints"(s.stats, p.position)
WHEN p.league = 'NBA' THEN
SELECT * FROM "CalculateNBAPoints"(s.stats, p.position)
) * (DATE_PART('day', NOW() - m.scheduled) < 10 THEN 1) INTO "@total"
FROM
leagueplayers AS p
LEFT JOIN
playermatchstats AS s ON
s.player = p.id
WHERE
p.id = "@player_id";
RETURN "@total";
END;
$func$ LANGUAGE PLPGSQL;
基本上,转换案例确定了玩家所在的联赛,然后使用必要的存储过程来计算该值。
我在想的另一种选择,使其更加灵活,是通过连接联赛名称来动态定义要使用的存储过程名称,即:
SELECT * FROM "Calculate" || player.league || "Points"(s.stats, p.position)
不确定是否可以。