[英]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);
謝謝你的幫助。
要將數據存儲到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.