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

时间:2018-03-01 07:07:36

标签: mysql variables select stored-procedures

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

3 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:1)

use- declare @approvalScore int;并初始化

答案 2 :(得分:0)

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

感谢。