mysql - 无法诊断MySQL存储过程的问题

标签 mysql sql stored-procedures

我定义了以下存储过程来添加/更新名为 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/

相关文章:

php - zend 框架中的 mysql 查询需要一些提示

php - 将 SQL 转换为 JSON 并保留空值?

使用 Inner Join 的 MySQL 查询返回存储过程中的所有记录

mysql - 不允许 NULL 参数到 MySQL/MariaDB 中的存储过程

sql - Firebird 将输入参数传递给 gen_id 函数

mysql - 不同表上多个主键的外键

mysql - 加快mysql更新查询

mysql - 合并 MYSQL 行,总计一些列,更新另一个表中的 ID

php - SQL 语法错误 id 突然为零

mysql - 具有复合主键的外键在 MySql 中不起作用