我定义了以下存储过程来添加/更新名为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
的记录,但是出现以下错误:您正在使用安全更新模式,并且尝试更新表时没有
使用KEY列禁用安全模式的位置
最佳答案
我很确定ImportedProductId = ImportedProductId
始终存在。也许重命名变量或为更新的表添加别名。