Mysql: 在 mysql 视图中调用 mysql 存储过程函数
Mysql: Calling mysql stored procedure function inside mysql view
我分别创建了一个存储过程和一个视图。我正在尝试从存储过程调用 minVal
和 maxVal
到我的视图,但我不知道为什么我无法使用 MySql Workbench[=17 调用它=]
存储过程
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
您需要使用存储函数,每个值一个。
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
我分别创建了一个存储过程和一个视图。我正在尝试从存储过程调用 minVal
和 maxVal
到我的视图,但我不知道为什么我无法使用 MySql Workbench[=17 调用它=]
存储过程
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
您需要使用存储函数,每个值一个。
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