我有一个存储过程,它将聚合的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);
感谢您的帮助。
答案 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中时设置它们,并且该过程现在可以正常工作。
感谢。