MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。相关的知识,希望对你有一定的参考价值。

我有一个存储过程,它将聚合的SUM选择为局部变量。

当我在mysql Workbench中运行代码(A Select into Statement)而不运行存储过程然后选择变量。我看到了我期望的结果。

当在Workbench或外部应用程序中运行完全相同的select into语句时,通过调用存储过程。局部变量总是返回NULL。

有没有人知道它为什么在存储过程之外工作,而不是在运行程序时。

我已经包含了存储过程代码和WorkBench的一些示例,这些示例返回结果而不是在proc中返回结果。

我甚至对输入变量进行了硬编码。它仍然无法正常工作。

干杯。

蒂姆。

DROP PROCEDURE MPSH.proc_entry_overallStatusUpdate;

DELIMITER //
CREATE PROCEDURE MPSH.proc_entry_overallStatusUpdate
(IN IN_entryID int(11), IN_entryStatusID int(11))
BEGIN   

    DECLARE approval int;

    SELECT  
        SUM(approval) 
    INTO 
        @approvalScore 
    FROM MPSH.tbl_EntryApprovals 
    WHERE entryID = 8
    AND entryStatusID= 8
    AND sysActive = 1
    GROUP BY entryID, entryStatusID;

   SELECT 'SUM',  @approvalScore ;


    IF @approvalScore   IS NOT NULL THEN 
        IF @approvalScore  >= 2 THEN
            #Approved
            SELECT 'Approve = 2';
            SET approval = 2;
        ELSEIF (@approvalScore  BETWEEN -1 AND 2) THEN
            #Awaiting Review
            SELECT 'Approve = 0';
            SET approval = 0;
       ELSE 
            #Entry Rejected.
            SELECT 'Approve = 3';
            SET approval = 3;
       END IF;


        #Update the Overall Status of an Entry. 
        UPDATE MPSH.tbl_EntryStatus
            SET  overallStatusID = approval
                    ,sysUpdated = NOW()
        WHERE entryStatusID = N_entryStatusID
        AND sysActive = 1;

    END IF;

END // 
DELIMITER ;

CALL MPSH.proc_entry_overallStatusUpdate(8,8);

谢谢你的帮助。

Running the Code with Hard Coded Values and the result Returns the Result.

Running the actual Stored Procedure and the Select Statement that is in there for Debugging returns NULL.

答案

use- declare @approvalScore int;并初始化它

另一答案

要将数据存储到MySQL中的变量中,您可以执行以下操作:

解决方法1

SET @approvalScore = 0;

SELECT  
    @approvalScore :=SUM(approval)  
FROM MPSH.tbl_EntryApprovals 
WHERE entryID = 8
AND entryStatusID= 8
AND sysActive = 1
GROUP BY entryID, entryStatusID;

溶液2

SELECT  
    SUM(approval) 
INTO 
   approvalScore 
FROM MPSH.tbl_EntryApprovals 
WHERE entryID = 8
AND entryStatusID= 8
AND sysActive = 1
GROUP BY entryID, entryStatusID;

作为一种好的做法,始终声明变量并设置它的默认值。

另一答案

@P.Salmon在这里有正确的观点。在重新编写了一些代码并重新阅读文档之后。我意识到我不应该将@vairables与声明变量混在一起。我将SP切换为仅使用@variables运行,并在它们首次出现在SP中时设置它们,并且该过程现在可以正常工作。

谢谢。

以上是关于MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。的主要内容,如果未能解决你的问题,请参考以下文章

在存储过程中使用表变量而不是仅从表或视图中选择?

Mysql将存储过程执行后的值赋值给变量

在 MySQL 中创建表变量

将 jquery 选择器存储在变量中

Mysql存储过程查询结果赋值到变量

mysql存储过程,选择最大值并插入值并分配给变量