Вызов хранимой процедуры динамически - PullRequest
0 голосов
/ 12 сентября 2018

Мне интересно, каков синтаксис для динамического выбора хранимой процедуры для вызова.

Вот моя хранимая процедура:

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)

Не уверен, хотя это возможно.

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