アカウント間の支払いを行うために、MYSQL データベースでこのストアド プロシージャを使用して練習しています。2 つのアカウント (acct1、acct2)、支払われる金額 (amt) の入力を受け取り、確認メッセージ (pmessage) を出力します。
(IF (balance1 >=amt) THEN ...) の場合にのみ支払いを行うことになっていますが、どういうわけか、利用可能な残高を超える金額を入力すると、支払いが行われます。理解できない。助けてください。
コードは次のとおりです。
DELIMITER //
CREATE PROCEDURE `make_payment`(IN `acct1` int(4), IN `acct2` int(4), IN `amt` float(10,2) unsigned, OUT `pmessage` varchar(100))
BEGIN
DECLARE balance1 FLOAT;
DECLARE balance2 FLOAT;
IF(acct1 !=acct2) THEN
SELECT balance INTO balance1 FROM mydb.accounts
WHERE account_no =acct1
ORDER BY balance DESC LIMIT 1;
SELECT balance INTO balance2 FROM mydb.accounts
WHERE account_no =acct2
ORDER BY balance DESC LIMIT 1;
IF (balance1 >=amt) THEN
begin
SET balance1 =balance1-amt;
SET balance2 =balance2+amt;
INSERT INTO mydb.accounts(account_no, outflow, balance)
VALUES(acct1, amt, balance1);
INSERT INTO mydb.accounts(account_no, inflow, balance)
VALUES(acct2, amt, balance2);
SET pmessage ="payment was successful";
END;
ELSE SET pmessage ="insufficient balance";
END IF;
END IF;
END //
DELIMITER ;