Мне интересно, каков синтаксис для динамического выбора хранимой процедуры для вызова.
Вот моя хранимая процедура:
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)
Не уверен, хотя это возможно.