MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。相关的知识,希望对你有一定的参考价值。
我有一个存储过程,它将聚合的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);
谢谢你的帮助。
答案
use- declare @approvalScore int;并初始化它
另一答案
要将数据存储到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;
作为一种好的做法,始终声明变量并设置它的默认值。
另一答案
@P.Salmon在这里有正确的观点。在重新编写了一些代码并重新阅读文档之后。我意识到我不应该将@vairables与声明变量混在一起。我将SP切换为仅使用@variables运行,并在它们首次出现在SP中时设置它们,并且该过程现在可以正常工作。
谢谢。
以上是关于MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。的主要内容,如果未能解决你的问题,请参考以下文章