我在MySQL中有这个存储过程:
CREATE PROCEDURE c_ranges(
_nombre VARCHAR(100),
_limiteinferior DECIMAL(10,2),
_limitesuperior DECIMAL(10,2)
)
BEGIN
DECLARE _newID INT;
SELECT MAX(idrango)+1 FROM rango INTO _newID;
IF (_newID IS NULL) THEN
SET _newID = 0;
END IF;
INSERT INTO rango (idrango,nombre,limiteinferior,limitesuperior)
VALUES(_newID,_nombre,_limiteinferior,_limitesuperior);
SELECT idrango FROM rango WHERE idrango=_newID;
END //
当我像这样运行时:
CALL c_ranges("My range",0,10.3)
它插入相同的记录两次,但第二次的id增加了一个。
使用存储过程多次尝试插入后,这是表的内容。
首次尝试:call c_Ranges("first range",0,0)
第二次尝试:call c_Ranges("second range",0,0)
第三次尝试:call c_Ranges("third range",0,0)
我真的很不安,有人能告诉我可能会发生什么吗?
答案 0 :(得分:0)
我最近面对这种情况。我发生的事情是,由于我自己的逻辑,我代码上调用存储过程的方法执行了两次。我知道,这很愚蠢,但是确实如此!
我的验证会评估存储过程响应的结果,并据此管理检索空JSON或响应的JSON的流程。我的错误是两次运行该方法,而不是存储响应,然后运行了验证。就像这样...
我做错了...
return (string.IsNullOrEmpty(data.callProcedure("copyData")) ? "{}" : data.callProcedure("copyData"));
我应该做的!
string response = data.callProcedure("copyData");
return (string.IsNullOrEmpty(response) ? "{}" : response));
希望有帮助!
答案 1 :(得分:0)
原因:phpMyAdmin问题
正如@ ZamronyP.Juhara在a comment to the question中指出的,这可能发生……
在PhpMyAdmin的SQL命令输入中运行
CALL aStoredProc()
时。它两次调用它们,导致创建两个记录。如果从PhpMyAdmin-> Database-> Routine-> Execute或从MySQL命令行执行,则不会发生此问题。
在通过phpMyAdmin 4.0.4.2测试存储过程时,我刚遇到此行为。