如何在过程内的 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 约束轻松执行。然后简单地更新事务中的两个表 - 如果余额应低于零然后发生约束违反,事务失败并回滚。
注意 - 由于违反约束而可能失败的查询是最上层的。如果您交换 UPDATE 查询,那么接受者的余额将被错误地更改。在这种情况下,您必须根据处理程序声明并在事务触发时回滚事务。
我正在尝试执行两个查询,将钱从一家银行“转移”到另一家银行(一家银行是一家 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 约束轻松执行。然后简单地更新事务中的两个表 - 如果余额应低于零然后发生约束违反,事务失败并回滚。
注意 - 由于违反约束而可能失败的查询是最上层的。如果您交换 UPDATE 查询,那么接受者的余额将被错误地更改。在这种情况下,您必须根据处理程序声明并在事务触发时回滚事务。