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

问题描述 投票:0回答:3

我有一个存储过程,它将聚合的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.

mysql variables select stored-procedures
3个回答
1
投票

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


1
投票

要将数据存储到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;

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


0
投票

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

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.