我在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加1。
这是使用存储过程多次尝试插入后的表内容。
第一次尝试:call c_Ranges("first range",0,0)
第二次尝试:call c_Ranges("second range",0,0)
第三次尝试:call c_Ranges("third range",0,0)
我真的很困惑,谁能告诉我这是怎么回事?
发布于 2018-07-07 02:54:40
我最近遇到了这种情况。发生在我身上的是,由于我自己的逻辑,我的代码中调用存储过程的方法执行了两次。我知道,这很愚蠢,但确实是这样!
我的验证将评估存储过程响应的结果,并据此管理检索空JSON或响应JSON的流程。我的错误是运行方法两次,而不是存储响应,然后运行验证。是这样的..。
我做错了什么。
return (string.IsNullOrEmpty(data.callProcedure("copyData")) ? "{}" : data.callProcedure("copyData"));
我应该做的事!
string response = data.callProcedure("copyData");
return (string.IsNullOrEmpty(response) ? "{}" : response));
希望它能帮上忙!
https://stackoverflow.com/questions/43135113
复制相似问题