Mysql:在mysql视图中调用mysql存储过程函数
Posted
技术标签:
【中文标题】Mysql:在mysql视图中调用mysql存储过程函数【英文标题】:Mysql: Calling mysql stored procedure function inside mysql view 【发布时间】:2021-10-08 04:22:12 【问题描述】:我有一个存储过程和一个单独创建的视图。我试图从存储过程中调用 minVal
和 maxVal
到我的视图,但我不知道为什么我无法使用 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存储过程函数的主要内容,如果未能解决你的问题,请参考以下文章