我似乎在努力将通过存储过程获取的值存储到现有列甚至是临时表中。以下是我到目前为止的情况:
USE `heatco`;
DROP procedure IF EXISTS `totalPd`;
DELIMITER $$
USE `heatco`$$
CREATE DEFINER=`root`@`localhost`
PROCEDURE `totalPd`(IN x int)
BEGIN
SELECT
A,B,C,D,
((A*(POWER(x,3)))+(B*(POWER(x,2)))+((C*POWER(x,1))+D))
AS total
FROM heatco.pressuredrop;
END$$
DELIMITER ;
每当我尝试将计算出的总价值存储到具有INSERT INTO
语句的内容中时,我无法使其工作,看起来好像我必须以某种方式将我的总价值存储为变量。< / p>
如果我能得到一些反馈,我会很高兴!
答案 0 :(得分:1)
AS
只为列创建别名,它不会定义变量。您需要使用INTO
将结果转换为变量。
SELECT a, b, c, d, ((A*(POWER(x,3)))+(B*(POWER(x,2)))+((C*POWER(x,1))+D))
INTO @a, @b, @c, @d, @total
FROM heatco.pressuredrop;
但是,如果查询选择了一行,则只能执行此操作,因此您可能需要WHERE
子句来选择所需的行,或者您应该在整个表中聚合列。
您还可以使用SELECT
列表中的作业。
SELECT a, b, c, d, @total := ((A*(POWER(x,3)))+(B*(POWER(x,2)))+((C*POWER(x,1))+D))
FROM heatco.pressuredrop;
这适用于返回多行,但它会覆盖所选每行的变量,因此@total
将包含最后一行的值。但是既然你没有ORDER BY
条款,那么它将是不可预测的那一行。