Mysql:在mysql视图中调用mysql存储过程函数

Posted

技术标签:

【中文标题】Mysql:在mysql视图中调用mysql存储过程函数【英文标题】:Mysql: Calling mysql stored procedure function inside mysql view 【发布时间】:2021-10-08 04:22:12 【问题描述】:

我有一个存储过程和一个单独创建的视图。我试图从存储过程中调用 minValmaxVal 到我的视图,但我不知道为什么我无法使用 mysql Workbench 调用它

存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `getMinMaxVal`(
    IN age int,
    OUT minVal double(8,2), 
    OUT maxVal double(8,2))
BEGIN
    SET minVal = 45.64;
    SET maxVal = 55.97;
END

MySql 视图

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `test_view` AS
    SELECT
        getMinMaxVal(`user_data`.`age`,minVal) AS `min_range`,
        getMinMaxVal(`user_data`.`age`,maxVal) AS `max_range`,
    FROM
        (`reports`
        JOIN `user_data` ON (`reports`.`uhd` = `user_data`.`id`))
    WHERE
        `reports`.`active` = 1
    ORDER BY `reports`.`created_at` DESC

【问题讨论】:

什么是getWeightRanges(),它与getMinMaxval()有什么关系? 不能在SELECT 查询中使用存储过程。也许你应该写一个函数。但它必须返回一个值,函数不能有OUT参数。 这能回答你的问题吗? MySQL stored procedure vs function, which would I use when? @Barmar 哎呀,我错误地粘贴了其他内容。已经更新了上面的代码 @Barmar 你的意思是我们也必须在视图中创建存储过程吗? 【参考方案1】:

您需要使用存储函数,每个值一个。

CREATE FUNCTION getMinVal(IN age INT) RETURN FLOAT
RETURN 45.64;

CREATE FUNCTION getMaxVal(IN age INT) RETURN FLOAT
RETURN 55.97;

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `test_view` AS
    SELECT
        getMinVal(`user_data`.`age`) AS `min_range`,
        getMaxVal(`user_data`.`age`) AS `max_range`,
    FROM
        (`reports`
        JOIN `user_data` ON (`reports`.`uhd` = `user_data`.`id`))
    WHERE
        `reports`.`active` = 1
    ORDER BY `reports`.`created_at` DESC

【讨论】:

非常感谢这对我有用。如果您认为这对其他人有帮助,请投票赞成这个问题,因为我看到许多其他人发现了类似的事情。我希望这个能帮助他们

以上是关于Mysql:在mysql视图中调用mysql存储过程函数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础篇(04):存储过程和视图,用法和特性详解

mysql 存储过程视图---创建调用删除

在 PHP 上调用 MySQL 存储过程

Java学习总结(十八)——MySQL数据库MySQL数据库中的视图,函数,存储过程中常见循环

MySQL - 索引&视图&存储过程

MySQL:视图与存储过程