动态调用存储过程

时间:2018-09-12 17:01:28

标签: postgresql psql

我想知道动态确定要调用的存储过程的语法是什么。

这是我的存储过程:

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)

不确定是否可以。

0 个答案:

没有答案