如何在过程内的 If 内执行多个查询?

How do I execute multiple querys inside an If inside a procedure?

我正在尝试执行两个查询,将钱从一家银行“转移”到另一家银行(一家银行是一家 table),但前提是新余额大于 0。sc_bank和 sub_bank 是两个 table,amountOfMoney、customerIDsc 和 customerIDsub 是过程中的参数。 phpmyadmin 给我多个 SQL 语法错误,我做错了什么?

BEGIN
    SELECT @A:=sub_bank.value FROM sub_bank WHERE customer_id = customerIDsub;
    IF @A - amountOfMoney > 0 THEN 
        UPDATE sc_bank SET sc_bank.value = sc_bank.value + amountOfMoney WHERE sc_bank.customer_id = customerIDsc;
        UPDATE sub_bank SET sub_bank.value = sub_bank.value - amountOfMoney WHERE sub_bank.customer_id = customerIDsub;
    END IF

END;

编辑: 这是 phpmyadmin 尝试执行以创建过程的函数,它似乎将 IF 放在第一个更新的 WHERE 语句中

CREATE DEFINER = `root`@`localhost` PROCEDURE `proceduro`(
    IN `amountOfMoney` DECIMAL(6, 2),
    IN `customerIDsc` INT(10),
    IN `customerIDsub` INT(10)
) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
BEGIN
    SELECT
        @A := sub_bank.value
    FROM
        sub_bank
    WHERE
        customer_id = customerIDsub; IF @A - amountOfMoney > 0 THEN
    UPDATE
        sc_bank
    SET
        sc_bank.value = sc_bank.value + amountOfMoney
    WHERE
        sc_bank.customer_id = customerIDsc;
    UPDATE
        sub_bank
    SET
        sub_bank.value = sub_bank.value - amountOfMoney
    WHERE
        sub_bank.customer_id = customerIDsub;
END IF
END;

该任务不需要“新余额大于 0”检查 - 它可以根据列 CHECK 约束轻松执行。然后简单地更新事务中的两个表 - 如果余额应低于零然后发生约束违反,事务失败并回滚。

DEMO fiddle

注意 - 由于违反约束而可能失败的查询是最上层的。如果您交换 UPDATE 查询,那么接受者的余额将被错误地更改。在这种情况下,您必须根据处理程序声明并在事务触发时回滚事务。

DEMO fiddle