无法存储我在存储过程中输出的值

时间:2018-02-02 17:02:44

标签: mysql sql stored-procedures

我似乎在努力将通过存储过程获取的值存储到现有列甚至是临时表中。以下是我到目前为止的情况:

    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>

如果我能得到一些反馈,我会很高兴!

1 个答案:

答案 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条款,那么它将是不可预测的那一行。