簡體   English   中英

MYSQL在“存儲過程”中的“將變量存儲到變量中選擇不存儲結果”中。

[英]MYSQL Select Into Variable not Storing result in Variable in Stored Procedure.

我有一個存儲過程,將聚合的SUM選擇到局部變量中。

當我在不運行存儲過程的情況下在MYSQL Workbench中運行代碼(“選擇語句”)時,然后選擇“變量”。 我看到了我期望的結果。

當通過調用存儲過程在工作台或外部應用程序中運行完全相同的select into語句時。 局部變量始終返回NULL。

有誰知道它為什么在存儲過程之外起作用,但在運行過程時卻不知道。

我已經包含了存儲過程代碼和一些返回結果而不在proc中返回結果的WorkBench示例。

我什至對輸入變量進行了硬編碼。 它仍然不起作用。

干杯。

蒂姆

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);

謝謝你的幫助。

使用硬編碼值運行代碼並返回結果。

運行實際的存儲過程以及其中用於調試的Select語句將返回NULL。

要將數據存儲到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;

好的做法是,始終聲明變量並設置其默認值。

使用-聲明@approvalScore int; 並初始化它

@ P.Salmon在這里有正確的觀點。 剪掉一些代碼並重新閱讀文檔后。 我意識到我不應該將@vairables與聲明變量混合使用。 我將SP切換為僅與@variables一起運行,並在它們首次出現在SP中時設置它們中的每一個,並且該過程現在可以正常工作。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM