如何创建一个调用MySQL中存储函数的视图?

时间:2017-02-08 17:39:03

标签: mysql stored-procedures

我创建了2个表。一个包含5个高尔夫球场(名称和地址)。另一个是每个高尔夫球场所有18洞的标准码和码数(链接到球场的外键)。我创建了一个函数getYards来返回一个课程的码数。我创建了第二个函数getPar来返回一个课程的总par。这些都是工作。我现在需要创建一个视图来显示课程名称以及使用2个功能的标准码和码数。 getYards函数:

DELIMITER $$

CREATE FUNCTION getYards (id INT)

RETURNS INT (5)

BEGIN

    DECLARE totalyards INT;

    SELECT SUM(hole_yards) INTO totalyards FROM golf_holes WHERE id=golf_id;

    RETURN totalyards;
END$$

DELIMITER ;

使用hole_par而不是码,getPar的函数非常相似。

所以现在我想使用getPar和getYards函数创建一个包含课程名称,par和码数的视图。我已经尝试过搜索,但我知之甚少。我知道这很模糊,但任何人都可以帮助我......保持简单!提前完成。

近40年来,我一直是cobol程序员。我正在尝试学习MySQL,因此对SQL知之甚少。

2 个答案:

答案 0 :(得分:0)

如果您想保持简单,我建议您不要在视图定义中使用存储的函数。

相反,你可以加入这两个表。

这样的事情对你有用:

create or replace view v_golf_courses as
select golf_courses.id as golf_course_id,
  golf_courses.name as golf_course_name, 
  sum(golf_holes.yards) as course_yardage, 
  sum(golf_holes.par) as course_par
from golf_courses
  inner join golf_holes on golf_holes.golf_course_id = golf_courses.id
group by golf_courses.id, golf_courses.name;

答案 1 :(得分:0)

假设您的课程表中的id列也名为golf_id

SELECT name, getPar(golf_id) as par, getYards(golf_id) as yards
FROM courses

但是你并不真正需要UDF:

SELECT a.name, sum(b.hole_par) as total_par, sum(b.hole_yards) as total_yards
FROM courses a
JOIN golf_holes b
ON a.golf_id = b.golf_id
GROUP BY a.golf_id