我定义了以下存储过程来添加/更新名为 ImportedProduct
的表。
如果提供了主键 ImportedProductId
并且大于零,则更新现有记录,否则插入新记录:
DELIMITER //
CREATE PROCEDURE AddOrUpdateImportedProduct (
IN ImportedProductId BIGINT,
IN UniqueThirdPartyCode VARCHAR(64),
IN BranchId BIGINT
)
BEGIN
IF ImportedProductId <= 0 THEN
INSERT INTO ImportedProduct(UniqueThirdPartyCode, BranchId)
VALUES(UniqueThirdPartyCode, BranchId);
ELSE
UPDATE
ImportedProduct
SET
UniqueThirdPartyCode = UniqueThirdPartyCode,
BranchId = BranchId
WHERE
ImportedProductId = ImportedProductId;
END IF;
END //
DELIMITER ;
现在我运行以下代码来更新现有行:
CALL AddOrUpdateImportedProduct (1, 'y-105', 24);
我可以看到表中存在 ImportedProductId = 1
的记录,但出现以下错误:
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode
最佳答案
我很确定ImportedProductId = ImportedProductId
始终成立。也许重命名您的变量或向更新的表添加别名。
关于mysql - 无法诊断MySQL存储过程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58740592/